0

我正在研究网格系统中的一个循环,该循环一次显示 2 个网格行,每行 3 个内联图像(分页)。我一直在尝试调试我的代码以<div id="clear"></div>在每 3 个返回的 MySQL 行后显示,但没有成功。

PHP/HTML

<ul class="clean" style="width:940px; height:465px;">
  <?php
  $result = mysql_query("SELECT * FROM images");
  $i=0;
  //Begin image loop
  while($row = mysql_fetch_array($result)){
  //Start counter
  $i++;
  $n = ($i + 5);
  $class = "";
  $clear = "";

  //Generate classes 
  if (($i % 3) == 1){
      $class = "alpha";
  }
  if (($i % 3) == 0){
      $class = "omega";
  }

  //Generate list items
  if (($n % 6) == 0){?>

  <li class="clearfix"> 
    <?php }if (($i % 4) == 0){?>
    <div id="clear"></div>
    <?php }?>
    <div class="grid_4 <?php echo $class;?>">
      <p><a href="<?php echo $row["src"];?>" alt="<?php echo $row["alt"];?>">
      <img src="<?php echo $row["src"];?>" alt="<?php echo $row["alt"];?>" />
      </a><br />
      <small class="center"><?php echo $row["excerpt"];?></small></p>
    </div>
    <?php if (($i % 6) == 0){?>
  </li> 
  <!-- //slide --> 
  <?php }} //End image loop?>
</ul>

我如何设置网格是,在从左到右的每个网格行中,都有一个alpha分配给第一个元素的omega类和一个分配给最后一个元素的类。为了在<div id="clear"></div>技术上每 3 个返回 MySQL 行后显示,这应该有效:

生成的列表项

<?php 
if (($n % 6) == 0){?>

<li class="clearfix"> 
<?php }if (($i % 4) == 0){?>
  <div id="clear"></div>
<?php }?> 

然而事实并非如此。在等于 18 个总图像的 6 个返回网格行内,它<div id="clear"></div>在 MySQL 行 1-3 和 13-15 之后生成良好,但对于 MySQL 行 6-9,<div id="clear"></div>显示在 MySQL 行 6 之后,它应该在 9 之后显示。

我希望这是有道理的,任何建议将不胜感激。

4

2 回答 2

1

See if something like this would work for you.

<?php
$i = 1;
$result = mysql_query("SELECT * FROM images");

$max_count = mysql_num_rows($result);

if($max_count > 0)
{
?>
<ul>
<?php
while($row = mysql_fetch_array($result)) {
    if($i % 3 == 1) {
        $class = 'alpha';
    } elseif($i % 3 == 0) {
        $class = 'omega';
    } else {
        $class = ''; //Do NOT carry through the loops
    }

    if($i % 6 == 1 || $i == 1) {
?>
    <li>
<?php
    }
?>
        <div class="grid_4 <?php echo $class ?>">
            <p>
                <a href="<?php echo $row["src"];?>" alt="<?php echo $row["alt"];?>"><img src="<?php echo $row["src"];?>" alt="<?php echo $row["alt"];?>" /></a>
                <br />
                <small class="center"><?php echo $row["excerpt"];?></small>
            </p>
        </div>
<?php
    if($i % 3 == 0) {
?>
        <div class='clear'>&nbsp;</div>
<?php
    }

    if($i % 6 == 0 || $i == $max_count) {
?>
    </li>
<?php
    }

    $i++; //Move Row Count Along
}
?>
</ul>
<?php
}
?>
于 2012-07-24T20:26:19.937 回答
1

好的,所以我认为这与您的if (($i % 4) == 0)陈述有关。您应该使用 3 的模数,而不是 4。这将<div id="clear"></div>在第一行给出您的 a。

为了防止这种情况,您可以说:

if ((($i % 3) == 0) && $i != 0)

试试看,让我知道它是否适合你!

于 2012-07-24T19:55:36.727 回答