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ę. |
|
|
|
john_doe [php][sql] Bread Crumps 22.08.2011, 13:46:53
john_doe uirapuru dzięki za post. Na chwilę obecną wykorzys... 22.08.2011, 22:24:34
uirapuru Pierwsze rozwiązanie ma wielką wadę właśnie w tym ... 22.08.2011, 23:05:44
john_doe wiesz robię to 1szy raz więc muszę się przkonać i ... 22.08.2011, 23:07:48
uirapuru polecam a) x-debug i korzystać z debugowania kodu ... 22.08.2011, 23:12:05
phpion Co do problemów z wywołaniem rekurencyjnym: po pob... 23.08.2011, 10:45:20
uirapuru dodatkowym przyspieszeniem moim zdaniem rekurencji... 23.08.2011, 10:54:20
phpion No tak, ale wówczas i tak odpalasz X zapytań, ale ... 23.08.2011, 10:57:28
uirapuru phpion: i mysle, ze to bardzo dobre rozwiazanie w ... 23.08.2011, 11:27:12
john_doe nie za bardzo kumam o co Wam chodzi panowie? w tej... 23.08.2011, 22:57:34
CuteOne [PHP] pobierz, plaintext $bread[$result-... 24.08.2011, 00:12:08
john_doe dzięki CuteOne mam taki kod teraz z Twoją sugestią... 24.08.2011, 11:04:55
CuteOne while($result->parent == 0) nie ma sensu -... 24.08.2011, 18:34:38
john_doe racja CuteOne
podaję rozwiązanie, dodatkowo w tym... 25.08.2011, 23:27:00 ![]() ![]() |
|
Aktualny czas: 26.12.2025 - 06:56 |