Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Drzewo kategorii - przeglądanie i prezentacja danych
Riggs
post
Post #1





Grupa: Zarejestrowani
Postów: 162
Pomógł: 13
Dołączył: 16.06.2007

Ostrzeżenie: (0%)
-----


Witam.
Jednym z założeń uczelnianego projektu jest stworzenie hierarchicznej struktury kategorii (czyli po ludzku mówiąc drzewa (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ). Czytałem o tym problemie na forum, jednak nie znalazłem odpowiedzi. Mam nadzieję że w tym temacie uda się to jakoś zebrać w całość i rozwiązać problem.
Mam z tym jednak kilka problemów.
Najpierw struktura tabeli:
  1. CREATE TABLE `categories` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(50) collate utf8_unicode_ci NOT NULL,
  4. `parent` int(11) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
  7.  
  8. INSERT INTO `categories` (`id`, `name`, `parent`) VALUES
  9. (0, 'root', 0);


Insert dodaje korzeń drzewa, tak żeby user przypadkowo nie zdefiniował wielu korzeni (root jest rodzicem dla wszystkich kategorii głównych).

Teraz problemy.
- wszytko wyświetlane jako listy.

Na stronie głównej w menu wyświetlam kategorie główne jako linki (np. tak jak w allegro.pl). Jest to proste.
  1. SELECT * FROM categories WHERE parent=0


Po kliknięciu w kategorię chciałbym, aby wyświetliły się jej dzieci, ale tylko poziom 1. Link oczywiście można zbudować tak
  1. <a href="?cat='id'>nazwa_podkategorii</a>
ale nie wiem jak to wyświetlić z widocznym rozróżnieniem na rodziców i potomków.
Dodatkowo przy kategorii chciałbym wyświetlić w nawiasach ile elementów zawiera kategoria i wszyscy jej potomkowie.
Mam rozwiązanie w rekurencji jednak przy dużym drzewie kategorii (raczej takie w projekcie nie powstanie ale lepiej się zabezpieczyć) gigantycznie rośnie liczba zapytań do bazy.

Jeśli nie da się jakoś ładnie zaprezentować takiego wyświetlania danych to proszę o jakieś nakierowania na inne sposoby.

Druga sprawa to dodawanie kategorii. Wiadomo, że każda kategoria musi mieć rodzica. Zrobiłem to jako pole <select> z opcjami jako rodzicem. Jednak zupełnie nie widać kto jest kogo rodzicem, kategorie wyglądają na równe sobie. Nie wiem jak to rozwiązać.

Ogólnie z mini-sondażu na uczelni wynika, że rozsądnym rozwiązaniem jest ograniczenie poziomów drzewa np do 4 poziomów. Co myślicie o takim rozwiązaniu?

PS. Nested sets w bazach danych nie wchodzi w tej chwili w grę - za słabo znam SQL i nie mam zbyt wiele czasu na zagłebienie się w niego.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 20:35