Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][sql] Bread Crumps, jak to rozwiązać koncepcyjnie, opcje
john_doe
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
uirapuru
post
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ę.
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: 9.10.2025 - 16:35