Autor Zpráva
Lucyk
Profil
Prosím o pomoc s následujícím spojením více částí kódu.

Snažím se na stránky vytvořit stromový výpis, který by měl plnit následující účel:
Při najetí na stránky se zobrazí seznam
1994-95 - Czech BOOK
1995-96 - Czech BOOK
1996-97 - Czech BOOK
1997-98 - Czech BOOK
1997-98 - Czech CD
1998-99 - Czech CD
1999-00 - Czech CD

Když uživatel klikne na 1994-95 Czech BOOK, tak mu vyjede podseznam:
1994-95 - Czech BOOK - Kids
1994-95 - Czech BOOK - Woman
1994-95 - Czech BOOK - Man

A pokud klikne na 1994-95 - Czech BOOK - Kids, tak mu vyjedou už např. samotné tituly:
1994-95 - Czech BOOK - Kids - Title 1
1994-95 - Czech BOOK - Kids - Title 2
1994-95 - Czech BOOK - Kids - Title 3
1994-95 - Czech BOOK - Kids - Title 4
1994-95 - Czech BOOK - Kids - Title 5
1994-95 - Czech BOOK - Kids - Title 6

Vše bych chtěla optimalizovat tak, aby se odehrávalo na jedné stránce, např. test.php

Podařilo se mi vytvořit dva kódy, které by tomuto mohly odpovídat, ale už si nevím rady s tím, jak je propojit do "cyklu".

O první dva výše uvedené případy se stará tato část kódu:
<?php
if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])){
    $nazev = $_SERVER['QUERY_STRING'];
    $nazev_kategorie = $_SERVER['QUERY_STRING'];
    $serie = str_replace(array('%20', '&'), ' ' , $_SERVER['QUERY_STRING']);

    $databaze="XXX";
    $spojeni=mysql_connect("XXX","XXX","XXX");

    $co="(XXX)";

    mysql_select_db("XXX") or die( mysql_error() ); 
    $navrat=mysql_query($co, $spojeni) or die(mysql_error());

    echo ("<h3><center>vybral jsi --- $serie</center></h3>");

    while (list($nazev,$nazev_kategorie,$nazev_podkategorie) = mysql_fetch_row($navrat)){
        echo ("<a href=\"test.php?$nazev&$nazev_kategorie&$nazev_podkategorie\"><b></b>$nazev - $nazev_kategorie - $nazev_podkategorie</a></br>");
        }
    } 
    else {
        error_reporting(E_ALL);
        $localhost = "XXX";
        $user = "XXX";
        $password = "XXX";
        $databaze = "XXX";
 
        mysql_connect($localhost, $user, $password)
                     or die("Nepodařilo se připojit k databázi");
        mysql_select_db($databaze)
                       or die("Nepodařilo se zvolit databázi");

        $databaze="XXX";
        $spojeni=mysql_connect("XXX","XXX","XXX");
        $co="(XXX)";

        mysql_select_db("XXX") or die( mysql_error() ); 

        $navrat=mysql_query($co, $spojeni) or die(mysql_error());

        while (list($nazev,$nazev_kategorie) = mysql_fetch_row($navrat)){
            echo ("<a href=\"test.php?$nazev&$nazev_kategorie\"><b></b>$nazev - $nazev_kategorie</a></br>");
        }
    }
?>

Tzn. po najetí na stránku test.php se automaticky zobrazí základní první seznam a pokud bude uživatelem kliknuto na určitý název, tak se zobrazí "podseznam" a k této podmínce "podseznamu" nevím, jak zapracovat následující část kódu, která samostatně funguje:

<?php
if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])){
    $nazev = $_SERVER['QUERY_STRING'];
    $nazev_kategorie = $_SERVER['QUERY_STRING'];
    $nazev_podkategorie = $_SERVER['QUERY_STRING'];
    $vypisuj = str_replace(array('%20', '&'), ' ' , $_SERVER['QUERY_STRING']);

    $databaze="XXX";
    $spojeni=mysql_connect("XXX","XXX","XXX");
    
    $co="(XXX)";

    mysql_select_db("XXX") or die( mysql_error() ); 
    $navrat=mysql_query($co, $spojeni) or die(mysql_error());

    echo ("<h3><center>vybral jsi --- $vypisuj</center></h3>");

    while (list($nazev,$nazev_kategorie,$nazev_podkategorie,$title) = mysql_fetch_row($navrat)){
        echo ("<a href=\"test.php?$nazev&$nazev_kategorie&$nazev_podkategorie\"><b></b>$nazev - $nazev_kategorie - $nazev_podkategorie - $title</a></br>");
        }
    } 
    else {
        PODMINKA KDYZ TO NEBUDE SPLNENO, treba opet zobrazeni hlavniho seznamu
    }
?>

Děkuji za každou radu či připomínku.
Hando
Profil
Ahoj.

Mohu se zeptat, jakou strukturu má databáze? Pokud máš jednotlivé tituly uložené v tabulce, stejně tak máš tabulky kategorií (a samozřejmě propojovací tabulky), tak pak není problém si vytvořit podkategorie atd. a následně prostě vypisovat podle vybrané kategorie, ne? Stejně tak třídit podle data vydání.

Mimochodem, mysql_funkce jsou zastaralé, není dobrý nápad je používat.
Lucyk
Profil
Mám to v jednotlivých tabulkách, na které mám udělané propojovací tabulky, takže něco takového:

ROK
id_rok    nazev
1          1994-95
2          1995-96
3          1996-97
4          1997-98
5          1998-99
6          1999-00

KATEGORIE
id_kategorie    nazev_kategorie
1               BOOK
2               CD
3               DVD

PODKATEGORIE
id_podkategorie        nazev_podkategorie    id_rok        id_kategorie    
1                      Kids
2                      Woman
3                      Man


Jednotlive tituly jsou pak v tabulce, která je komcipována
id_titul    id_podkategorie        jmeno        prijmeni            nazev_titulu
1
2


Je tato struktura vhodná pro vytvoření stromového seznamu?

Pod jakým názvem by se dal hledat "návod" na tento způsob větvení?
Kcko
Profil
Není. Tabulka v nejjednodušší podobě by mělá být takto

category
id | category_parent | name

Starý kód k ukázce, která dělá to co potřebuješ, je to prostá rekurze.

ukázka (zdroj) (dump)

Případně v poli
ukázka (zdroj)

Pak jsou samozřejmě složitější postupy.
Lucyk
Profil
Tak to pak netuším jak udělat vhodnou strukturu jednotlivých tabulek, protože hlavní účel to má plnit následující:

po kliknutí na stránku test.php se má zobrazit seznam

1994-95 - Czech BOOK
1995-96 - Czech BOOK
1996-97 - Czech BOOK
1997-98 - Czech BOOK
1997-98 - Czech CD
1998-99 - Czech CD
1999-00 - Czech CD

Po kliknutí na 1994-95 Czech BOOK se zobrazí podseznam:
1994-95 - Czech BOOK - Kids
1994-95 - Czech BOOK - Woman
1994-95 - Czech BOOK - Man

A po kliknutí na 1994-95 - Czech BOOK - Kids vyjednou jednotlivé tituly.
1994-95 - Czech BOOK - Kids - Title 1
1994-95 - Czech BOOK - Kids - Title 2
1994-95 - Czech BOOK - Kids - Title 3
1994-95 - Czech BOOK - Kids - Title 4
1994-95 - Czech BOOK - Kids - Title 5
1994-95 - Czech BOOK - Kids - Title 6

V budoucnu se předpokládá přidávání nejen dalších titulů, ale také roků, další položky stejné úrovně jako je BOOK, CD a položky stejné úrovně Kids, Man, Woman.

Ta první ukázka by se mi i zamlouvala, ale s tím, že pokud by uživatel kliknul na 1994-95 - Czech BOOK, tak už by se mu zobrazil jenom:
1994-95 - Czech BOOK
- 1994-95 - Czech BOOK - Kids
- 1994-95 - Czech BOOK - Woman
- 1994-95 - Czech BOOK - Man

A pokud by kliknul na 1994-95 - Czech BOOK - Kids, tak by se mu mohl zobrazit podseznam a ty stávající související seznamy v rámci skupiny, tzn. nějak takto:

1994-95 - Czech BOOK
- 1994-95 - Czech BOOK - Kids
--- 1994-95 - Czech BOOK - Kids - Title 1
--- 1994-95 - Czech BOOK - Kids - Title 2
--- 1994-95 - Czech BOOK - Kids - Title 3
- 1994-95 - Czech BOOK - Woman
- 1994-95 - Czech BOOK - Man

Ale teď si lámu hlavu nad tím, jak strukturovat jednotlivé tabulky a kolik jich udělat.

Mým záměrem je udělat to, aby tento celý cyklus zobrazování jednotlivých seznamů probíhal v rámci jedné stránky a nemusela mít pro každý seznam ROK - BOOK (CD nebo DVD atd.) udělanou novou stránku.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: