在网格中平铺缩略图
Tile Thumbnails in a Grid
我想像这样使用 bootstrap 的网格 类 将缩略图平铺成 3 列(此条目只有 3 张图像):
第 4 个图像将转到 <div class="col-sm-4"></div>
中的下一行 <div class="row"></div>
,第 5 个和第 6 个图像在同一行但分开 <div class="col-sm-4"></div>
。然后第7张图片到第3行等等...
包括 url 在内的图像详细信息是使用 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; ?>
但我一直在努力弄清楚如何找到要显示的屏幕截图的索引。
您在上面的输出中混淆了行和列。
一旦确定,如果您需要一个整数索引,您应该能够从行和列值计算它。对于基于零的图像数组,类似于 (row*3)+column
也就是说,在 Bootstrap 中,您不需要按照现有的方式创建单独的行。如果你把所有的 col-sm-3 div 一个接一个地放置,而不分解新的行,无论如何这都会自行解决。
这样做,您可以使用 col-Xxx 为不同的屏幕宽度指定不同的列数,而无需更改代码。
诀窍是将每个新数据发送到由 <div class="column-sm-4">
定义的单个列中,并且为了让三个项目连续,在每三个项目之后调用 <div class="row">
。这可以通过使用初始化为 0 的计数器然后每次将其值递增 1 并在 dividing it by 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 我们需要再次检查 division 是否得到一个整数:
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;
?>
我想像这样使用 bootstrap 的网格 类 将缩略图平铺成 3 列(此条目只有 3 张图像):
第 4 个图像将转到 <div class="col-sm-4"></div>
中的下一行 <div class="row"></div>
,第 5 个和第 6 个图像在同一行但分开 <div class="col-sm-4"></div>
。然后第7张图片到第3行等等...
包括 url 在内的图像详细信息是使用 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; ?>
但我一直在努力弄清楚如何找到要显示的屏幕截图的索引。
您在上面的输出中混淆了行和列。 一旦确定,如果您需要一个整数索引,您应该能够从行和列值计算它。对于基于零的图像数组,类似于 (row*3)+column
也就是说,在 Bootstrap 中,您不需要按照现有的方式创建单独的行。如果你把所有的 col-sm-3 div 一个接一个地放置,而不分解新的行,无论如何这都会自行解决。 这样做,您可以使用 col-Xxx 为不同的屏幕宽度指定不同的列数,而无需更改代码。
诀窍是将每个新数据发送到由 <div class="column-sm-4">
定义的单个列中,并且为了让三个项目连续,在每三个项目之后调用 <div class="row">
。这可以通过使用初始化为 0 的计数器然后每次将其值递增 1 并在 dividing it by 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 我们需要再次检查 division 是否得到一个整数:
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;
?>