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
 
Start new topic
Odpowiedzi (1 - 5)
.radex
post
Post #2





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


Cytat
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ć.


Może tak:

Kod
root
| usr
|| bin
|| lib
| home
|| radex
||| Pulpit
| bin


?

Cytat
ale nie wiem jak to wyświetlić z widocznym rozróżnieniem na rodziców i potomków.


Po prostu w funkcji rekurencyjnej skanujesz katalogi w górę i w dół, albo od korzenia z podświetleniem obecnego.
Go to the top of the page
+Quote Post
antyqjon
post
Post #3





Grupa: Zarejestrowani
Postów: 77
Pomógł: 27
Dołączył: 24.03.2002
Skąd: Tarnów

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


Może to Ci się na coś przyda:

http://kapelak.pl/2008/04/04/drzewa-w-mysql/

http://dev.mysql.com/tech-resources/articl...hical-data.html
Go to the top of the page
+Quote Post
Riggs
post
Post #4





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

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


Skorzystałem z Materialized Path czyli Drzewa IP. Dość ciekawe rozwiązanie, łatwo się przegląda i działa bardzo szybko. Trudność to wysiłek przy implementacji, ale się opłaca.
Jak skończę projekt to wrzucę gotowca wraz z zestawem przydatnych funkcji.
Go to the top of the page
+Quote Post
Babcia@Stefa
post
Post #5





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

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


Na PW Ci prześlę moją klasę (jest ona od pewnego mojego serwisu), ale zastrzegam sobię udostępniania jej.
Pozwala ona na tworzenie kategorii w nieskończoność, to znaczy możesz tworzyć kategorie, i subkategorie w nieskończoność.

Pozdrawiam, Babcia@Stefa
Go to the top of the page
+Quote Post
zwolu
post
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 5.04.2007

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


Mam pytanie do metody The Nested Set Model, czy wszystkie kategorie trzymamy pomiędzy 1 i n, czyli tworzymy jedną kategorię mastera, w której tworzymy dopiero kategorię główne, czy tworzymy kategorie główne poprzez 1 kat lft 1 rgt 20 i kolejna lft 21 rgt 48 itd?
Go to the top of the page
+Quote Post

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: 22.08.2025 - 18:08