Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZF] Bloki w widoku
yankes
post 1.03.2008, 16:14:06
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 13.01.2006

Ostrzeżenie: (0%)
-----


robiac portal skladajacy sie z roznych modułow: core ( odpowiedzialny za wyswietlenie strony glownej itp ) + galeria + newsy + artykuly itp.... ;]
lepiej jest poslugiwac sie na sztywno metodami statycznymi do pobierania blokow np: strona glowna sklada sie menu + blok ostatnich 10 newsow + blok ostatnich 10 artow i teraz

class IndexContoller extends Zend_Controller_Action

function indexAction() {
$this->view->blockNews = BlockNews::showLastNews( 10 );
$this->view->blockArticles = ArticlesNews::showLastArticles( 10 );
echo $this->view->render('IndexPage.tpl');
}

}

czy lepiej jest w wyswietlic samo
class IndexContoller extends Zend_Controller_Action

function indexAction() {
echo $this->view->render('IndexPage.tpl');
}

}

a w widoku za pomoce plugina $this->_action(....) odwolywac sie to wybranych kontrolerow / akcji questionmark.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 19)
LBO
post 1.03.2008, 20:13:29
Post #2





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Moim zdaniem lepiej korzystać z pluginu w widoku. Dzięki temu poszczególne akcje stają się bardziej uniwersalne (reusable).

W pierwszym przypadku za bardzo mieszasz logikę widoku z kontrolerem - wyobraź sobie ile akcji byś musiał zmieniać gdybyś w ten sposób dołączał np. menu strony? Od tego jest widok i niech tak zostanie.
Go to the top of the page
+Quote Post
yankes
post 2.03.2008, 02:33:16
Post #3





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 13.01.2006

Ostrzeżenie: (0%)
-----


czyli wychodzi ze najlepsza metoda na tego typu serwisu jest cos takiego questionmark.gif?

Przykład:
-IndexController
-NowosiController
-GaleriaController
-ArtykulController

(podział na moduły itp odpuscilem - chodzi o sam schemat )

IndexController odpowiedzialny jest za pierwsza strone

----------------------------------------------------------------
| $this->partial('header.tpl'); |
|---------------------------------------------------------------
| | |
| | |
| $this->action( odwolanie do | $this->action( |
| NewsController....) | Menu.... |
|-------------------------------------------- |
| | |
| $this->action(odwoloanie do | |
| ArtykulController....) | |
| | |
| | |
----------------------------------------------------------------
Go to the top of the page
+Quote Post
LBO
post 2.03.2008, 04:18:10
Post #4





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dokładnie, dodatkowo tą część z headerem i menu (+ np. footer) przeniósłbym do layoutu.
Go to the top of the page
+Quote Post
kosmowariat
post 2.03.2008, 05:51:28
Post #5





Grupa: Zarejestrowani
Postów: 235
Pomógł: 17
Dołączył: 18.07.2007
Skąd: Białystok

Ostrzeżenie: (0%)
-----


masz przecież modele...

ja bym to zrobił tak

  1. <?php
  2. /**
  3.  * IndexController - The default controller class
  4.  */
  5.  
  6. require_once 'Zend/Controller/Action.php';
  7.  
  8. class IndexController extends Zend_Controller_Action 
  9. {
  10. public function indexAction() 
  11. {
  12. Zend_Loader::loadClass('NewsModel');
  13. Zend_Loader::loadClass('ArticleModel');
  14. $news = new NewsModel();
  15. $art = new ArticleModel();
  16. $this->view->news = $news->fetchAll(null, array('published'=>'DESC'),10);
  17. $this->view->art = $art->fetchAll(null, array('published'=>'DESC'),10);
  18. }
  19. }
  20. ?>


i opracowujesz to sobie ładnie w widoku ;-) do tego sugeruję configi w których będziesz przechowywał liczbę pobieranych newsów; drugą dobrą opcją jest plugin + config, aczkolwiek cały render sugeruję już w widoku
Go to the top of the page
+Quote Post
yankes
post 2.03.2008, 08:10:05
Post #6





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 13.01.2006

Ostrzeżenie: (0%)
-----


tylko chciałbym mieć wieksza 'elastycznosc' aplikacji - tj. na stronie glownej chce miec od box z promocyjnymi towarami to w widoku wstawiam sobie
<div class="box_promocje">{$this->action( PromocjeController ...... )}</div> smile.gif)
więc jakoś to rozwiązanie z pluginami bardziej do mnie przemawia smile.gif

a header + footer - faktycznie do Layout ;]
Go to the top of the page
+Quote Post
Sabistik
post 2.03.2008, 10:46:21
Post #7


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Oczywiście że najlepiej korzystać z helpera widoku 'action'. Powstał on właśnie do tego żeby można było robić opisane przez Ciebie widgety (bloki). Opisany sposób przez ~kosmowariata jest bezsensu bo w takim rozwiązaniu trzeba by przekazywać do widoku w każdej akcji te wszystkie bloki. To już lepiej by było zastosować actionstack i wykonywać równocześnie akcje odpowiedzialne za bloki i przekazywać wyniki do layoutu.
Go to the top of the page
+Quote Post
yankes
post 2.03.2008, 11:34:14
Post #8





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 13.01.2006

Ostrzeżenie: (0%)
-----


Sabistik: powiedz mi jeszcze tylko jak najrozsadniej zablokowac uzytkownikowi dostanie sie do funkcji odpowiedzialnej za wyswietlanie: box z logowanie ktory bedzie umieszczony layout... bo majac np:

class UzytkownikController {

public function boksLogowaniaAction() {
//... tu cala logika zwiazana ze sprawdzanie czy user logniety czy nie...
//.. tu views/script zostanie 'zrenderowany' tongue.gif
$this->_helper->viewRenderer->setResponseSegment('boksLogowanie');
}

}


strona glowna portalu:
class IndexController {

public function indexAction() {
$this->_helper->layout()->setLayout('indexPage.phtml');
}

}


natomiast glowny layout:
<html>
<head><title>......</title></head>
<body>
superrrrr portal tongue.gif
<?php $this->action('boksLogowania', 'Uzytkownik', null, array() ); ?>
</body>
</html>

ktos może dostac sie do funkcji opdowiedzialnej za wyswietlenie boksa z logowaniem przez www.portal.pl/uzytkownik/boksLogowanie smile.gif
jedyne co mi przychodzi do glowy to doszukac sie jakiejs metody a obiekcie request ;]

a przy okazji dobrze zrozumialem 'idee' podziału na komponenty ? ;]
Go to the top of the page
+Quote Post
Sabistik
post 2.03.2008, 12:13:56
Post #9


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Myślę że można sprobować to sprawdzać w stylu:
  1. <?php
  2. if( Zend_Controller_Front::getInstance()->getRequest()->getControllerName() == $this->getRequest()->getControllerName() ) { 
  3. /* wywal wyjątek, przekieruj... */ 
  4. }
  5. ?>
Go to the top of the page
+Quote Post
yankes
post 2.03.2008, 18:08:28
Post #10





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 13.01.2006

Ostrzeżenie: (0%)
-----


oki smile.gif pierwsza implementacja tego sposobu zrobiona ;] troche to dziwnie wyglada jak co kawłek w kodzie $this->action(.....) ;] i nie jestem do konca przekonany ze jest to w 100 % zgodne z ideą mvc ... chociaz w symfony jest 'odpowiednik' tego: http://www.symfony-project.org/book/1_0/07...ayer#Components
Go to the top of the page
+Quote Post
LBO
post 2.03.2008, 18:16:21
Post #11





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dlaczego miałoby nie być zgodne? Nadal zachowana jest separacja wszystkich 3-ech płaszczyzn. A jednocześnie jest to wygodne.

Nie bądź ślepo zapatrzony we wzorce projektowe - one są po to by ułatwić programiście życie - tzn. jeżeli coś nie jest w 100-tu procentach zgodne z czymś, nie oznacza, że się nie nadaje. Zwracaj uwagę raczej na to czy nie nabruździsz sobie w kodzie nowym rozwiązaniem.

Dodatkowo, nie ma nigdzie jasno opisanych wzorców, a raczej wzorcowych Ich implementacji. Wiele rzeczy można zrobić na milion sposobów, a i tak będzie to samo.

Pozdrawiam, LBO

Ten post edytował LBO 2.03.2008, 18:17:08
Go to the top of the page
+Quote Post
yankes
post 2.03.2008, 22:16:01
Post #12





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 13.01.2006

Ostrzeżenie: (0%)
-----


oki smile.gif troche moze i za bardzo 'ksiazkowo' staram sie projektowac app ;] ale tak nauczony.. ;] powiedz mi jeszcze tylko czy np: majac koszyk z towarami / czy boks do logowania lepiej wstawiac go przez odwolanie sie do jakiegos kontrolera/akcji za pomoca $this->action() czy stworzyc sobie wlasny helper wstawKoszyk() / wstawLogowanie() i tam pobierajac dane z bazy / sesji wyswietlic to co nalezy questionmark.gif? ;]
Go to the top of the page
+Quote Post
LBO
post 2.03.2008, 22:28:43
Post #13





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Pracując na Agavi nauczyłem się, że najlepiej większość rzeczy opierać o kontrolery/akcje... jest to wygodne smile.gif

Np, robisz kontroler odpowiedzialny za logowanie i korzystając z narzędzi dostępnych we frameworku ustalasz czy wyświetlić formularz, czy zwykłe "Witaj użytkowniku taki a taki". Wstawiasz to w szablonie i cała reszta z głowy.

Tak samo menu - tworze cały kontroler odpowiedzialny za dodawanie, odejmowanie czy automatyczne pobieranie linków (z cała otoczką administracyjną) a layoucie wstawiam akcje to menu wyświetlającą.
Tylko faktycznie, Zend powinien zrobić jakiś mechanizm ukrywający kontrolery/akcje przed Dispatcherem - bo rozwiazania które tu widziałem nie wydją mi się eleganckie.

Ten post edytował LBO 2.03.2008, 22:29:12
Go to the top of the page
+Quote Post
kosmowariat
post 3.03.2008, 00:43:37
Post #14





Grupa: Zarejestrowani
Postów: 235
Pomógł: 17
Dołączył: 18.07.2007
Skąd: Białystok

Ostrzeżenie: (0%)
-----


@Sabistik - popraw mnie jeśli się mylę, ale helpera tego nie ma w ostatniej stabilnej wersji ZF
Go to the top of the page
+Quote Post
yankes
post 3.03.2008, 01:13:54
Post #15





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 13.01.2006

Ostrzeżenie: (0%)
-----


najnowsza stabilna wersja została pozbawiona helpera action / komponentu : Zend_Layout ... ale daj gora miesiac jak 1.5 bedzie stable ;]
Go to the top of the page
+Quote Post
coolin1986
post 29.04.2008, 09:01:57
Post #16





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 3.03.2008
Skąd: Białoruś

Ostrzeżenie: (0%)
-----


Mam pytanie, jak w metodze action przekazuje sie zmienne?


--------------------
webdesign hamburg
werbung hamburg
GRAND MEDIA
Go to the top of the page
+Quote Post
Sabistik
post 29.04.2008, 09:33:49
Post #17


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


manual zamknęli?
  1. <?php
  2. string action (string $action, string $controller, [string $module = null], [ $params = array()])
  3. ?>
Go to the top of the page
+Quote Post
coolin1986
post 29.04.2008, 09:37:27
Post #18





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 3.03.2008
Skąd: Białoruś

Ostrzeżenie: (0%)
-----


ale mi chodzi o to:
<?= $this->action('latestnews', 'index', null, array('count' => 10, 'idNode' => 149)); ?>
czy takie cos jest dobrze?
I jak pozniej taka zmienna pobrac w konkretnej metodzie?

Ten post edytował coolin1986 29.04.2008, 09:50:48


--------------------
webdesign hamburg
werbung hamburg
GRAND MEDIA
Go to the top of the page
+Quote Post
Sabistik
post 29.04.2008, 10:17:44
Post #19


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


No przecież cały czas o tym rozmawiamy. Do parametrów odwołujesz się jak przy normalnym requestcie.
Go to the top of the page
+Quote Post
coolin1986
post 29.04.2008, 10:32:05
Post #20





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 3.03.2008
Skąd: Białoruś

Ostrzeżenie: (0%)
-----


Ok, dziala winksmiley.jpg


--------------------
webdesign hamburg
werbung hamburg
GRAND MEDIA
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:47