Witam,
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?