0

私は明らかな何かを見落としていると確信していますが、ここに行きます。

私は、MySQL で 2 つのテーブルを使用していcategoriesますworks。テーブルを正常に結合し、 で両方を参照していmysql_fetch_arrayます。(私はこれが非推奨であることを認識しています。)

また、カテゴリ名を 1 回表示した後、そのカテゴリのすべての作品を表示することもできます。

ただし、カテゴリ内のすべてのエントリを div で囲むと、問題が発生します。エントリを 1 つの 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 ステートメントの外に移動すると、worksテーブル内の各エントリは正常に表示されますが、gallery-grid クラスは後続の各カテゴリと対応するエントリをラップします。アイテム クラスを移動</div>し、ギャラリー グリッド クラスを現在の場所のままにすると、折りたたみ可能なコンテンツは空白になり、エントリは対応するカテゴリの下に適切に表示されますが、折りたたみ可能な範囲外になります。

最終的に、特定のカテゴリのすべてのエントリを表示しながら、特定のカテゴリのすべてのエントリを一度ラップするにはどうすればよいですか?

4

1 に答える 1