mam menu, które powstaje na podstawie wpisów w bazie danych, których struktura wygląda następująco:
*************************************************************************** * button * category * subcategory * label * link * *************************************************************************** * 1 * 0 * 0 * Aktualnosci * news.php * *************************************************************************** * 2 * 0 * 0 * Download * download.php * *************************************************************************** * 2 * 1 * 0 * programy * download.php?id=program * *************************************************************************** * 2 * 1 * 1 * pocztowe * download.php?id=mail * *************************************************************************** * 2 * 2 * 2 * graficzne * download.php?id=graph * ***************************************************************************
W tym miejscu może trochę wyjaśnię. Kolumna button jest nadrzędna i jeżeli category oraz subcategory jest równa zero to jest to po prostu nadrzędny dział w menu. Jeżeli pole categoryposiada cyfre wyzsza od zera, ale pole subcategory jest rowne zero to jest to dzial podrzedny. Tak samo jest w przypadku subcategory - to juz sa najbardziej podrzedne dzialy.
Kod php odpowiedzialny na wyswietlenie tych danych wyglada nastepujaco:
<?php $menu = ''; $query = "SELECT button, label, link FROM menu WHERE category = '0' AND subcategory = '0' ORDER BY button ASC"; // PYTAM I POBIERAM ILOSC KATEGORII $squery = "SELECT COUNT(category) FROM menu WHERE button = '$result[0]'"; // if ($rows[0] > 1) { $menu .= '<tr><td class="over"><a href="#" class="focus">'.$result[1].'</a></td></tr>'; // POBIERAM WSZYSTKIE PODKATEGORIE $tquery = "SELECT category, label, link FROM menu WHERE button = '$result[0]' AND category != '0' AND subcategory = '0' ORDER BY category ASC"; // // PYTAM I POBIERAM ILOSC PODKATEGORII $fquery = "SELECT COUNT(subcategory) FROM menu WHERE button = '$result[0]' AND category = '$tresult[0]'"; // if ($rows[0] > 1) { $menu .= '<tr><td> » <a href="#">'.$tresult[1].'</a><br />'; $fquery = "SELECT label, link FROM menu WHERE button = '$result[0]' AND category = '$tresult[0]' AND subcategory != '0' ORDER BY subcategory ASC"; $menu .= ' » <a href="'.$fresult[1].'">'.$fresult[0].'</a><br />'; } $menu .= '</td></tr>'; } else { $menu .= '<tr><td> » <a href="#">'.$tresult[1].'</a><br />'; } } } else { $menu .= '<tr><td class="over"><a href="#">'.$result[1].'</a></td></tr>'; } } ?>
Kod nie jest tutaj aż tak istotny, w każdym razie efektem jego działania jest mniej więcej coś takiego:
- Aktualnosci - Download - programy - pocztowe - graficzne
A mój problem polega na tym, że to drzewo ma się pierwotnie ładować tylko w postaci głównych guzików (tych co mają wartość category oraz subcategory równą zero). Dopiero po ich kliknięciu mają się otwierać kolejne drzewa i tylko aktualnie przeglądane. Taki skrypt też już zrobiłem i działa on prawidłowo. Chodzi mi tutaj bardziej o inny pomysł, ponieważ aby to działało musiałem przekazywać metodą $_GET zmienne informujące o aktualnie przeglądanym dziale co było dosyć uciążliwe. Macie pomysł żeby to zrobić inaczej?