我相当肯定我忽略了一些显而易见的事情,但事实就是如此。
我正在使用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
,但遇到了同样的问题。如果我在IF语句之外移动项目类和gallery-grid类的</div>
,则works
表中的每个条目都会成功显示,但gallery-grid类会包装每个后续类别,相应的条目。如果我移动项目类但将</div>
留给当前的gallery-grid类,则可折叠内容为空白,并且条目位于可折叠之外,但在相应类别下正确显示。
最终,如何在给定类别ONCE中包装所有条目,同时在给定类别中显示所有条目?
答案 0 :(得分:1)
据我了解你的问题,你不是在寻找这样的东西吗?
只有在类别更改时才需要编写包装器的开头/结尾(保留order by category
)。每个循环传递都无条件地写入项目。
注意if($category != null){...}
是因为没有关闭第一个包装器,循环外的最后一个</div>
用于关闭最后一个包装器
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']) {
if($category != null){
?>
</div>
<?php
}
$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">
<?php
}
?>
<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>
<?php
}
?>
</div>