我很确定我忽略了一些明显的东西,但它就是这样。
我正在使用 MySQL 中的两个表,一个categories
用于works
. 我已经成功地将这些表连接在一起,并用mysql_fetch_array
. (我知道这已被弃用。)
我还能够成功显示一次类别名称,然后显示该类别中的所有作品。
然而,我遇到了一个问题,将一个 div 包裹在一个类别中的所有条目周围。我想在条目周围包裹一个 div 的原因是我正在使用可折叠项来保持信息井井有条。类别名称作为可折叠的触发器,当用户单击类别名称时,作品会展开/折叠。
(我也在 FancyBox 中打开每个图像,但这与我的问题无关。)
这是我的代码:
$sql = "SELECT *
FROM gallery
LEFT JOIN gallery_categories ON gallery.category=gallery_categories.category_id
ORDER BY category ASC";
$result = mysql_query($sql) or print ("Can't join tables.<br />" . $sql . "<br />" . mysql_error());
$category = null;
while($row = mysql_fetch_array($result)){
$id = $row['id'];
$title = stripslashes($row['title']);
$image = stripslashes($row['image']);
$timestamp = stripslashes($row['timestamp']);
if ($category != $row['category']) {
$category = $row['category'];
?>
<div class="page_collapsible" id="<?php echo $row['category_id']; ?>"><h3><div class="title"><?php echo $row['category_name']; ?></div></h3></div>
<div class="gallery-grid">
<div class="item">
<div class="content"><a class="fancybox" href="images/works/<?php echo $image ?>" title="<?php echo $title ?>, <?php echo $timestamp ?>"><img src="images/thumbs/<?php echo $image ?>" class="thumb" /><div class="thumb-border"></div></a></div>
</div>
</div>
<?php
}
}
该类page_collapsible
包含可折叠触发器。该类gallery-grid
是要折叠的内容的包装器。该类item
包含有关works
表中每个条目的信息。
我遇到的问题是代码只迭代表works
中与类别匹配的第一行。我曾尝试删除类别显示的 IF 语句,而是尝试GROUP BY
了 ,但遇到了同样的问题。如果我将 item 类和</div>
gallery-grid 类的 IF 语句移到 IF 语句之外,表中的每个条目works
都会成功显示,但 gallery-grid 类会包装每个后续类别和相应的条目。如果我移动项目类但将</div>
画廊网格类保留在当前位置,则可折叠内容为空白,并且条目在可折叠之外,尽管正确显示在其相应类别下。
最终,如何将给定类别中的所有条目包装一次,同时显示给定类别中的所有条目?