网格中的平铺缩略图

时间:2016-02-21 10:27:46

标签: php html css twitter-bootstrap-3 grid-layout

我想使用像这样的bootstrap网格类将缩略图拼接成3列(此条目只有3个图像): example

第4张图片会转到同一行<div class="row"></div>,第5和第6张图片中的下一行<div class="col-sm-4"></div>,但会分开<div class="col-sm-4"></div>。然后第7张图像进入第3行等......

包括网址的图片细节是使用php从数据库中获取的。

<div class="panel-body">
    <?php foreach($screenshots as $key=>$screenshot): ?>
    <div class="col-sm-4">
        <div class="panel panel-default">
            <div class="panel-heading">
                <h3 class="panel-title"><?=$screenshot["ss_name"]?></h3>
            </div>
            <div class="panel-body">
                <img class="img-rounded" style="display: block; text-align:center;" src="<?=UPLOADS_FOLDER.$screenshot['ss_url']?>" alt="<?=$screenshot['ss_name']?>">
                <p><?=$screenshot["ss_description"]?></p>
            </div>
        </div>
    </div>
    <?php endforeach; ?>
</div>

我设法找出了算法:

<?php
$total_entries = count($screenshots);
$total_cols = 3;
$total_rows = ceil($total_entries / $total_cols);

for($col = 0; $col < $total_cols; ++$col):
?>
    <div class="row" style="margin: 1% 0.5%;">
    <?php for($row = 0; $row < $total_rows; ++$row): ?>
        <div class="col-sm-4">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h3 class="panel-title">Panel Title</h3>
                </div>
                <div class="panel-body">
                    row: <?=$row?> | col: <?=$col?>
                </div>
            </div>
        </div>
    <?php endfor; ?>
    </div>
<?php endfor; ?>

Generated Grid with Panels

但是我一直试图弄清楚如何找到要显示的屏幕截图的索引。

2 个答案:

答案 0 :(得分:1)

您在上面的输出中混合了行和列。 一旦修复了,如果你需要一个整数索引,你应该能够从行和列值计算它。对于基于零的图像阵列,类似于(行* 3)+列

也就是说,在Bootstrap中,您不需要以您拥有的方式创建单独的行。如果你把所有的col-sm-3 divs一个接一个地放在一起,而不会打破新的行,那么无论如何都要自行解决。 这样做,您可以使用col-Xxx为不同的屏幕宽度指定不同数量的列,而无需更改代码。

答案 1 :(得分:0)

技巧是将所有新数据发送到<div class="column-sm-4">定义的单个列中,并使其连续包含三个项目,每三个项目之后调用<div class="row">。可以通过使用初始化为0的计数器,然后每次将其值递增1并在将其除以3时插入新行来得到整数来完成此操作:

 $count = 0;
 if (is_int($count/3)){
       echo '<div class="row">';
 }

我们需要在第一个元素之前插入一个div,以便检查它的开始位置:

if ($count==0  OR is_int($count/3)){
   echo '<div class="row">';
}

然后,为了关闭div,我们需要再次检查除法结果是否为整数:

if(is_int($count/3)){
   echo '</div>' ;
}

我们还需要在最后一个元素之后关闭div,以便通过以下方式检查元素是否为最后一个:

if($count==$total_entries OR is_int($count/3)){
   echo '</div>' ;
}

完整代码为:

<?php 
      $count = 0;
      $total_entries = count($screenshots);

      foreach($screenshots as $key=>$screenshot): 
      if ($count==0  OR is_int($count/3)){
      echo '<div class="row">';
      }
      ?> 

        <div class="column-sm-4">
        <div class="panel panel-default">
        <div class="panel-heading">
        <h3 class="panel-title"><?=$screenshot["ss_name"]?></h3>
        </div>
        <div class="panel-body">
        <img class="img-rounded" style="display: block; text- 
        align:center;" src="<?=UPLOADS_FOLDER.$screenshot['ss_url']?>" 
        alt="<?=$screenshot['ss_name']?>">
        <p><?=$screenshot["ss_description"]?></p>
        </div>
        </div>
        </div>

    <?php
    $count++;
    if($count==$total_entries OR is_int($count/3)){
    echo '</div>' ;
    }
    endforeach;  
?>