![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 873 Pomógł: 25 Dołączył: 24.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Tworzę katalog produktów. Menu jest rozwijane w dół, może być n-poziomowe. Tworze je skryptem, kolumny m.in. (id, name, link, image, parent_id). Chciałbym stworzyć bread crumps ale jak narazie nie przychodzi mi do głowy jak to zrobić? Tworzę to w CI. Nie jest to zbyt rozbudowany system. Narazie link mam postaci http://www.katalog.pl/device/show/2/5 gdzie kolejno device - kontroller show - metoda 2 - id grupy 4 - do paginacji proszę o wskazówki jak wykonać "gdzie jestem" Chciałbym to zrobić już teraz zanim wykonam cały katalog a potem przez Okruszki ... będę musiał coś poprawiać wstecz. może napisać coś takiego co by sprawdzało pokrewieństwo wstecz aż do parent_id = 0 pozdrawiam Ten post edytował john_doe 22.08.2011, 14:50:33 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 182 Pomógł: 9 Dołączył: 30.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
hmmm, masz wiele możliwości stworzenia struktury drzewa w bazie danych, najprostsze to korzystanie z dodatkowej kolumny: parent_id
drugi sposob to tzw. nested sets. Ja korzystam z obu naraz. Poza tym masz jeszcze materialized path. Najprościej - jak działają? a/ kazdy wpis ma id i parent_id - odwolują sie do siebie nawzajem. aby znaleźć breadcrumb musialbys pobrać element który aktualnie wyswietlasz oraz wszystkie wiersze 'starsze' - niestety przez rekurencję, a więc sposób jest po prostu powolny i kosztowny b/ nested set to taka konstrukcja, gdzie najwyzszy element jest jak zbiór i zawiera w sobie wszystkie 'poniższe', a one zawierają kolejne dzieci, a te dzieci kolejne dzieci itd. ważne są 'uszy' zbioru. Zbiór pusty ma lewe ucho = 1, prawe ucho = 2. Jeżeli dodamy coś do tego zbioru, to teraz dziecko będzie miało lewe ucho = 2, prawe = 3, natomiast zbiór 'rodzic' będzie mieć zmodyfikowane prawe ucho - powiększone o 2. W rezultacie dostajemy coś takiego: (IMG:http://upload.wikimedia.org/wikipedia/commons/thumb/4/41/NestedSetModel.svg/400px-NestedSetModel.svg.png) Mam nadzieję, że widzisz, gdzie są 'uszy' - to liczby na krawędziach. Ten sposob jest ok, ale o ile wyciągnięcie 'ścieżki' jest proste dzięki niemu, to już inne modyfikacje (usunięcie, przeniesienie) bywają kosztowne. Ja najbardziej lubie pracować na połączeniu obu powyższych c/ materialized path zawiera po prostu kolumnę, w której wpisujesz id albo bezpośredino breadcrumbsy, np. tak: 1, meble, kategoria z meblami, meble 2, drewniane, kategoria z meblami drewnianymi, meble.drewniane 3, kuchenne, kategoria z meblami drewnianymi do kuchni, meble.drewniane.kuchenne 4. stoły, kategoria z meblami drewnianymi do kuchni bedacymi stolami ;D, meble.drewniane.kuchenne.stoly Jak widać masz breadcrumb w ostatniej kolumnie jak na dłoni - tyle, ze wyobraz sobie co sie stanie, jesli bedziesz chcial przeniesc gdzies indziej element (IMG:style_emoticons/default/smile.gif) Poza powyzszym musisz pamietac o elementach statycznych - nie wszystko masz w bazie. dlatego najfajniejszym moim zdaniem rozwiązaniem jest tworzyć (statycznie lub dynamicznie plus cacheowanie) pliku np. xml zawierajacego całą 'nawigację' - hierarchiczną strukturę strony w postaci xmlowego drzewa. Wtedy tylko odczytujesz sobie z pliku 'gdzie jestes' i wyciągasz ścieżkę. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 16:35 |