Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Powtarzające się boxy na stronie
Forum PHP.pl > Forum > PHP > Frameworki
Fraglesss
Witam,
To moja pierwsza przygoda z Zend'em i aktualnie jestem początkujący, ale mam ochotę to zmienić. Piszę CMS'a na potrzeby nauki i chce zrobić stronę na której w sidebarze będą jakieś boxy, np. Lista kategorii, ostatnie wpisy lub inne. Problemem jest to że nie znalazłem rozwiązania. Znalazłem tylko wzmianke o helperach, konkretnie o view helperach, ale nie wiem jak to dalej pociągnąć.

Prosiłbym o jakieś wskazówki, z góry dziękuje.
PawelC
http://zend-framework.web-portals.pl/ tutaj znajdziesz odpowiedzi na każde pytanie smile.gif generalnie, przestudiuj tą stronę, a wiele rzeczy się nauczysz smile.gif Jest tam też, wzmianka o powtarzających się elementach na stronie.
Fraglesss
No z tej strony zaczynałem ale nie widzę tam odpowiedzi na to pytanie.
PawelC
http://www.heavymind.net/zend-framework-tutorial/ a to widziałeś? Jest napisane, zaraz przy tworzeniu aplikacji smile.gif gdzie się wrzuca, powtarzający kod itp
Fraglesss
Nie wiem czy dobrze mnie zrozumiałeś. Pokaże szkic


Mam layout, w którym zmienia się content, a po prawej chciałbym właśnie zrobić tą liste kategorii. Nie chce w każdym kontrolerze wywoływać tego samego, nawet nie powinienem, więc może masz jakiś pomysł? Na tej stronie co podałeś również nic nowego nie widzę.
seth-kk
Jeśli bazujesz na jednym kontrolerze to informacje o kategoriach podajesz w init()
Możesz też to zrobić w kontrolerze bazowym lub wyciągać te informacje w layoucie za pomocą helpera Action
melkorm
- Kontroler bazowy - Tak.
- Action Helper - Nie
- Helpery dla każdego box'u - Tak.
Fraglesss
Poszukałem trochę i zbierając wszystko doszedłem do tego:
1. Tworzę helpera w application/views/helpers/CategoryBox.php
2. Klasa:
  1. class Zend_View_Helper_CategoryBox extends Zend_View_Helper_Abstract
  2. {
  3. public function categoryBox()
  4. {
  5. /*... */
  6. }
  7. }

3. W widoku:
$this->categoryBox();

Czy takie rozwiązanie jest poprawne?

W init nie mogę bo mam kilka kontrolerów.
melkorm
Cytat
Czy takie rozwiązanie jest poprawne?


Tak.

Cytat
W init nie mogę bo mam kilka kontrolerów.


Stwórz sobie kontroler między Twoimi kontroloerami a Action Controllerem Zend'a i wtedy dla wszystkich kontrolerów możesz tam wrzucać łączące je rzeczy jak np. style,skrypty, jakieś funkcje pomocnicze itp~~.
seth-kk
Cytat(melkorm @ 24.11.2010, 23:27:34 ) *
- Action Helper - Nie

Nie Action Helper tylko Zend_View_Helper_Action w prostszych przypadkach powinien wystarczyć
melkorm
Cytat
Nie Action Helper tylko Zend_View_Helper_Action w prostszych przypadkach powinien wystarczyć

to może :
Cytat
Możesz też to zrobić w kontrolerze bazowym lub wyciągać te informacje w layoucie za pomocą helpera Zend_View_Helper_Action


Co do przypadków, dispatchowanie na nowo całej aplikacji tylko po to by wyświetlić kilka rekordów z bazy jest bezsensu, cały ten helper jest dziwny winksmiley.jpg
Deamos
Cytat(melkorm @ 25.11.2010, 22:02:05 ) *
Co do przypadków, dispatchowanie na nowo całej aplikacji tylko po to by wyświetlić kilka rekordów z bazy jest bezsensu, cały ten helper jest dziwny winksmiley.jpg

Też to stosowałem, później zorientowałem się, że każde odwołanie się do tego powoduje odpalenie połowy zenda ponownie, popieram przedmówcę, dziwnie to zrobili.
Osobiście polecam pośredni kontroler ze wszystkim co w layoucie, od całego heada po wszelkie boxy. W zależności od potrzeby we właściwym kontrolerze odnosisz się do pustego zendowskiego kontrolera albo do własnego ze wszystkim co potrzebujesz smile.gif

W samym layoucie polecam używanie placeholderów i ustawianie ich zawartości np. w kontrolorze i $this->partial do includowania szablonów z przekazywaniem własnych zmiennych.
aart3k
Placeholdery ustawiać w kontrolerze...? Widok zostaw widokowi tongue.gif

Generalnie to polecam naprawdę pójście za maksymą "fat models, thin controllers" - box z ostatnimi postami z forum można wrzucić do
layoutu za pomocą view helpera. W samym view helperze wielkim grzechem nie będzie korzystać z modeli.
R4D3K
Witam a nie lepiej jest zastosować Zend_Layout questionmark.gif aby zmieniać pole gdzie ma iść render można użyć viewRenderera z opcją setResponseSegment() questionmark.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.