0

我很确定我忽略了一些明显的东西,但它就是这样。

我正在使用 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>画廊网格类保留在当前位置,则可折叠内容为空白,并且条目在可折叠之外,尽管正确显示在其相应类别下。

最终,如何将给定类别中的所有条目包装一次,同时显示给定类别中的所有条目?

4

1 回答 1

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>
于 2013-07-08T14:55:18.713 回答