![]() |
![]() |
![]()
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:
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.
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 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. |
|
|
![]() |
![]()
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. |
|
|
![]()
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 |
|
|
![]()
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. |
|
|
![]()
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 |
|
|
![]()
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?
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 18:08 |