Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Zend_Navigation a menu wielopoziomowe
Forum PHP.pl > Forum > PHP > Frameworki
Gabrielx
Witam.

Pracuję obecnie nad stroną która będzie posiadała wiele pozycji menu (kategorii) oraz podmenu (podkategorii)
np.

+Menu
------submenu_1
------submenu_2
-------------submenu_2.1
-------------submenu_2.2
-------------submenu_2.3
------submenu_3

Pozycje menu można dodać przez panel administratora.

Dodatkowo zamierzam aby wszystko było przetwarzane przez jeden kontroler. Widok miałby być dostosowywany względem typu (coś w stylu szablonów, czy to tekst, czy to grafika czy też grafika + text)

Stwierdziłem też że bez sensu ograniczać typ artykułu (grafika, text) względem menu.

Moje pytanie brzmi:

1. Jak opracować bazę danych dla kategorii?

Np. artykuł artykuł by był podczepiony pod submenu_2.3
Zastanawiałem się nad takim rozwiązaniem:

____________________
|id|title |id_sub
|1|Menu |null
|2|submenu_1 |1
|3|submenu_1.1 |2.1
|4|submenu_1.2 |2.2

Lecz wówczas musiałbym sprawdzać czy submenu istnieje dla tej kategorii i jeśli tak to wówczas muszę sprawdzić które z kolei jest to submenu. id_sub byłoby zależne od id menu. Później zapisanie tego do navigation.xml byłoby problematyczne jak i usunięcie popzredniej kategorii i wstawienie nowej dla wstawiania tego poprzez panel administratorski..

2. Druga kwestia to artykuły dla wybranej kategorii. Nie wyobrażam sobie że tworzę ~ 100 akcji (dla kategorii). W jaki sposób później manipulować URI przy wyświetlaniu? Nie za bardzo wiem jak później odczytać taki ciąg np. localhost/index/menu/o_nas/mapka. Lub bynajmniej odczytanie ostatniej wartości (mapka)

Możliwe że nie zrozumiecie tego co chciałem przekazać, więc proszę się dopytywać jak coś.
Pilsener
Cytat
Pracuję obecnie nad stroną która będzie posiadała wiele pozycji menu (kategorii) oraz podmenu (podkategorii)
- polecam drzewa metodą IP (więcej znajdziesz w gugle na tą frazę), może to niezbyt wyrafinowane ale skuteczne - tak się robi bazę danych kategorii.

Cytat
Dodatkowo zamierzam aby wszystko było przetwarzane przez jeden kontroler.
- wszystko czyli cała strona? To moim zdaniem ogromny błąd, nie warto próbować bo utkniesz na amen, gdy unikniesz problemów systemowych to dogoni Cię wydajność, warto pomyśleć o podziale aplikacji na kontrolery i akcje.

Cytat
2. Druga kwestia to artykuły dla wybranej kategorii. Nie wyobrażam sobie że tworzę ~ 100 akcji (dla kategorii). W jaki sposób później manipulować URI przy wyświetlaniu? Nie za bardzo wiem jak później odczytać taki ciąg np. localhost/index/menu/o_nas/mapka. Lub bynajmniej odczytanie ostatniej wartości (mapka)


Artykuły np. w postaci listy to jeden kontroler i jedna akcja (chyba, że przewidujesz wiele sposobów wyświetlania artykułów). Przykłady:
Adres ma postać: moduł/kontroler/akcja/parametr_1/wartosc_1/parametr_2/wartosc_2 - przykładowy adres, jeśli wyłączono obsługę modułów to bez modułu, tylko sam kontroler i akcja
Artykuł może mieć np. adres: localhost/artykuly/artykul/title/bardzo_fajny_artykul/id/123456789 - jeden artykuł, kontroler artykuly, akcja artykul, id=123456789
Kategoria: localhost/artykuly/kategoria/title/smiecie_i_rupiecie/id/23 - lista artykułów, kontroler artykuly, akcja kategoria, kategoria id=23
Oczywiście title nie jest niezbędny (id się liczy) ale istotny z punktu widzenia SEO
Gabrielx
1. A co sądzisz o path enumaration? Czy to nie jest to samo (bo poniekąd wygląda to podobnie lecz nie posiada innych dodatkowych kolumn)
2. Przepraszam źle się wyraziłem, chodziło mi o to co później opisałeś smile.gif
3. Jestem początkujący w ZF, w jaki sposób dodawać parametr/wartość/parametr/wartość?(podsójne paramtery, jak zrobić to dla dwóch parametrów)
Bo zwykle generowałem je w widoku np.
Kod
        <?php foreach ($this->articles as $artykul): ?>
            <tr><td><a href="<?php echo $this->url(
                    array(
                        'action'=>'show',
                        'articles'=>$artykul->idarticles,
                        ),'default')?>"><?php echo $artykul->title;  ?></a>
                </td>
            </tr>
        <?php endforeach; ?>


Ps. są jakieś inne metody generowania urli do akcji lub coś podobnego(inne metody zarządzania tego typu rzeczami)?
melkorm
Cytat
- polecam drzewa metodą IP (więcej znajdziesz w gugle na tą frazę), może to niezbyt wyrafinowane ale skuteczne - tak się robi bazę danych kategorii.


Można też za pomocą Nested Tree:)

Cytat
3. Jestem początkujący w ZF, w jaki sposób dodawać parametr/wartość/parametr/wartość?(podsójne paramtery, jak zrobić to dla dwóch parametrów)
Bo zwykle generowałem je w widoku np.

W tablicy podajesz dalej po prostu:
  1. $this->url(
  2. 'action'=>'show',
  3. 'articles'=>$artykul->idarticles,
  4. 'foo' => 'bar',
  5. ),'default');
  6. // w kontrolerze:
  7. $this->_getParam('foo');
Gabrielx
Ok. Dziękuję smile.gif


A co do Nested Tree - bardzo trudno Inserty wykonywać na niej i delety, więc raczej odpada smile.gif (chyba że ktoś wymyślił uniwersalny sposób dla wszystkich przypadków)
Ktoś zna zastosowanie Nested Tree? Dla menu którego struktury się nie zmienia? Bo przecież jeśli chodzi o Zend_Navigation to sporo osób generuje to do xml'a - nie korzysta z DB więc teoretycznie zapytania (w moim przypadku) byłyby tylko wykorzystywane do tworzenia artykułów/nowych elementów menu smile.gif
melkorm
Jak się tobie nie zmienia Nawigacja to xml/ini file i po sprawie smile.gif
Gabrielx
Właśnie się zmienia smile.gif Oddaję tę stronę klientowi i nie chcę później uczestniczyć co raz przy jakiś mniejszych zmianach.

Czy tak jak wcześniej pisałłem, to dobry pomysł aby db było zależne od xml. Czyli usuwam z DB kategorie/menu = usuwa xml.

Dlatego się pytałem o inne rozwiązania smile.gif
melkorm
Zawsze możesz z bazy generować nawigację lub plik z nawigacją to nie jest jakiś większy problem smile.gif
Gabrielx
Zawsze najprostrze rozwiązania są najlepsze. smile.gif Za bardzo chcę utrudniać sobie życie po prostu - za bardzo pasjonują mnie wyszukane techniki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.