Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z menu
Forum PHP.pl > Forum > Przedszkole
nexis
Witam,

mam menu, które powstaje na podstawie wpisów w bazie danych, których struktura wygląda następująco:

  1. ***************************************************************************
  2. * button * category * subcategory * label * link *
  3. ***************************************************************************
  4. * 1 * 0 * 0 * Aktualnosci * news.php *
  5. ***************************************************************************
  6. * 2 * 0 * 0 * Download * download.php *
  7. ***************************************************************************
  8. * 2 * 1 * 0 * programy * download.php?id=program *
  9. ***************************************************************************
  10. * 2 * 1 * 1 * pocztowe * download.php?id=mail *
  11. ***************************************************************************
  12. * 2 * 2 * 2 * graficzne * download.php?id=graph *
  13. ***************************************************************************


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:

  1. <?php
  2. $menu  = '';
  3. $query = "SELECT button, label, link FROM menu WHERE category = '0' AND subcategory = '0' ORDER BY button ASC";
  4. $query = mysql_query($query);
  5. while ($result = mysql_fetch_array($query)) {
  6. // PYTAM I POBIERAM ILOSC KATEGORII
  7. $squery = "SELECT COUNT(category) FROM menu WHERE button = '$result[0]'";
  8. $squery = mysql_query($squery);
  9. $rows  = mysql_fetch_array($squery);
  10. //
  11. if ($rows[0] > 1) {
  12. $menu .= '<tr><td class="over"><a href="#" class="focus">'.$result[1].'</a></td></tr>';
  13. // POBIERAM WSZYSTKIE PODKATEGORIE
  14. $tquery = "SELECT category, label, link FROM menu WHERE button = '$result[0]' AND category != '0' AND subcategory = '0' ORDER BY category ASC";
  15. $tquery = mysql_query($tquery);
  16. //
  17. while ($tresult = mysql_fetch_array($tquery)) {
  18. // PYTAM I POBIERAM ILOSC PODKATEGORII
  19. $fquery = "SELECT COUNT(subcategory) FROM menu WHERE button = '$result[0]' AND category = '$tresult[0]'";
  20. $fquery = mysql_query($fquery);
  21. $rows  = mysql_fetch_array($fquery);
  22. //
  23. if ($rows[0] > 1) {
  24. $menu .= '<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&raquo; <a href="#">'.$tresult[1].'</a><br />';
  25. $fquery = "SELECT label, link FROM menu WHERE button = '$result[0]' AND category = '$tresult[0]' AND subcategory != '0' ORDER BY subcategory ASC";
  26. $fquery = mysql_query($fquery);
  27. while ($fresult = mysql_fetch_array($fquery)) {
  28. $menu .= '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&raquo; <a href="'.$fresult[1].'">'.$fresult[0].'</a><br />';
  29. }
  30. $menu .= '</td></tr>';
  31. } else {
  32. $menu .= '<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&raquo; <a href="#">'.$tresult[1].'</a><br />';
  33. }
  34. }
  35. } else {
  36. $menu .= '<tr><td class="over"><a href="#">'.$result[1].'</a></td></tr>';
  37. }
  38. }
  39. ?>


Kod nie jest tutaj aż tak istotny, w każdym razie efektem jego działania jest mniej więcej coś takiego:

  1. - Aktualnosci
  2. - Download
  3. - programy
  4. - pocztowe
  5. - 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?
dawhol
Najlepiej rozwiązac to za pomocą javy tzn pobiera cale menu ale wczesniej jest on zwiniete - nie powiem ci co i jak dokladnie bo nie znam sie na Javie ale najlepiej by było za jej pomocą to wykonać.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.