PHP / MySQL类别div包装问题

时间:2013-07-08 14:42:03

标签: php mysql html

我相当肯定我忽略了一些显而易见的事情,但事实就是如此。

我正在使用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中包装所有条目,同时在给定类别中显示所有条目?

1 个答案:

答案 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>