我想使用像这样的bootstrap网格类将缩略图拼接成3列(此条目只有3个图像):
第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; ?>
但是我一直试图弄清楚如何找到要显示的屏幕截图的索引。
答案 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;
?>