Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.

> Widok - renderowanie widoku, sposoby implementacji, różnice w istniejacych rozwiązaniach
Cysiaczek
post
Post #1





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Mam nadzieję, że trafię w gusta z takim tematem.
Dyskusja dotyczy szeroko rozumianego V w architekturze MVC, jego budowy i sposobów działania w różnych frameworkach i rozwiązaniach własnych.

Terminologia A
Proponuję przyjąć taką terminologię , aby nie było w dyskusji nieporozumień.

Widok to inaczej warstwa prezentacji wyników użytkownikowi. W budowie występują: format i renderer
Formatami są np. HTML, XML, plik tekstowy, obrazek
Rendererami dla formatu HTML są np. (gołe)PHP, Smarty, OPT


Dane widoku to wszelkie dane, przekazane do widoku przez kontroler lub dane, do których widok ma dostęp w inny sposób.
Proszę zatem nie pisać, "że widok pobiera dane z modelu", bo jeśli ma do niego dostęp, to model jest daną, którą widok potrafi zinterpretować.


Mile widziane diagramy UML lub inne, byle miały ręce i nogi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Proszę nie zadawać pytań przedszkolnych!

P.S Jeśli ktoś ma jeszcze jakieś propozycje terminologii, proszę zgłosić mi, albo któremuś moderatorowi - jeśli będa sensowne, zostaną dodane w tym poście.
Jeśli ktoś się nie zgadza z tą terminologią, niech zaproponuje inną i zaznacza, której używa w dyskusji (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Następna nazwa to 'B', potem 'C' itd

Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
LBO
post
Post #2





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

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


Cytat(Cysiaczek @ 14.09.2008, 00:31:24 ) *
@LBO - gdzieś jednak musi zostać podjęta decyzja o formacie odpowiedzi. Można się pobawić w inteligentne rozpoznawanie, czego najprostszym przykładem są rozszerzenia
[url="http://domain.pl/news.hml"]http://domain.pl/new... /ciach/


To się rozumie samo przez się (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Korzystam z Agavi i chyba zrobię mała prywatę:

  1. <?php
  2.  
  3. class Post_BrowseSuccessView extends BlogaviBaseView
  4. {
  5.    // Wypluwamy HTML
  6.    public function executeHtml(AgaviRequestDataHolder $rd)
  7.    {
  8.        // Routing ustalił na podstawie urla, że akcja ma wypluć HTML
  9.        
  10.        $this->setupHtml($rd, 'master'); // ustawiamy layout
  11.        
  12.        // Kontroler już odwalił bródna robotę - pobranie danych z bazy poprzez model
  13.        // i wybranie (zwrócenie nazwy) odpowiedniego widoku np. Success, Error, Input - i przekazał
  14.        // listę artykułów do widoku (dostepną w tutaj z poziomu metody
  15.        // AgaviVi::getAttribute('list_of_articles').
  16.        
  17.        // Ustawiamy zmienną specyficzną dla HTML <title />
  18.        // Można też z modelu dociągnąć inne specyficzne/dodatkowe dla danego formatu dane.
  19.        $this->setAttribute('title', 'Lista artykułów.');
  20.        
  21.        // Następnie kotroler/dispatcher przechodzi do szablonu.
  22.        // Szablon może byc różny, gdyz w konfigu można zaznaczyć jaki
  23.        // renderer ma być użyty (jak i ustawić własny); Może to być czysty PHP,
  24.        // phpTAL, OPT etc.
  25.    }
  26.  
  27.    // Wypluwamy Json
  28.    public function executeJson(AgaviRequestDataHolder $rd)
  29.    {
  30.        // Routing ustalił na podstawie nagłówka (np. 'X-Requested-With' == 'XmlHttpRequest'), że akcja
  31.        // ma wypluć JSON - to o czym pisałeś Cysiaczku:)
  32.        
  33.        // Agavi pozwala skonfigurować nagłówki dla konkretnych formatów
  34.        // zwanych tutaj output_types. Mozna też ustawić ręcznie.
  35.        $this->container->getResponse()->setContentType('application/json');
  36.        
  37.        // Wynik jest zwracany bezpośrednio z pominięciem szablonu.
  38.        return json_encode($this->getAttribute('list_of_articles'));
  39.    }
  40.    
  41.    // Wypluwamy CSV
  42.    public function executeCSV(AgaviRequestDataHolder $rd)
  43.    {
  44.        $this->container->getResponse()->setContentType('text/csv');
  45.        
  46.        // Poniżej logika (logika widoku) budowania dokumentu CSV
  47.        $csv = fopen('p://temp', 'r+');
  48.        fputcsv($csv, $this->getAttribute('list_of_articles'));
  49.        rewind($csv);
  50.        return $csv; // Tutaj magia Agavi - sama wykryje, że zwracany jest handler pliku i go wypluje.
  51.    }
  52. }
  53.  
  54. ?>


Jak widzicie widok to zestaw klas obsługujących równolegle (ale oddzielnie) różne formaty wynikowe. Dzięki temu, zostawiamy akcji tylko to czym ma się zająć - pobraniem danych i przekazaniem do odpowiedniego widoku.
Sam widok Agavi, jest znacznie bardziej rozbudowany, gdyż na przykład layouty (w większości frameworków zwykłe szablony ze zdefiniowanych miejscem "wklejenia" wyniku aktualnej akcji) mogą składać się z kilku warstw, gdzie do każdej może być przypisany inny renderer (tak, można mieć jednocześnie Smarty i OPT (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) ). Na dodatek można layouty modyfikować in runtime (programistycznie) dodając lub usuwając wybrane warstwy.

Ten post edytował LBO 14.09.2008, 00:32:38
Go to the top of the page
+Quote Post

Posty w temacie
- Cysiaczek   Widok - renderowanie widoku   12.09.2008, 15:38:06
- - orglee   Dobra to ja doleję oliwy do ognia i zaczn...   12.09.2008, 17:23:25
- - LBO   Mnie osobiście denerwuje, że w MVC rozpowszechnion...   13.09.2008, 21:16:47
- - orglee   No właśnie otóż to. Dla mnie widok ...   13.09.2008, 22:29:43
- - LBO   Cytat(orglee @ 13.09.2008, 23:29:43 )...   13.09.2008, 23:17:06
- - Cysiaczek   @orglee - To, że dla użytkownika frameworka model ...   13.09.2008, 23:31:24
- - orglee   CytatNie zapominaj, że Smarty nie zrobi wszystkieg...   13.09.2008, 23:59:15
- - LBO   Cytat(Cysiaczek @ 14.09.2008, 00:31:2...   14.09.2008, 00:31:40
- - Cysiaczek   Coś czuję, że zaraz znów rozbijemy ...   14.09.2008, 00:32:29
- - LBO   Cytat(orglee @ 14.09.2008, 00:59:15 )...   14.09.2008, 00:42:15
- - orglee   Mam propozycję. Może zdefiniujmy czym powinno się ...   14.09.2008, 01:00:09
- - Cysiaczek   Ja od zawsze forsuję prosty podział widoku na: 1. ...   14.09.2008, 01:25:37
- - Black-Berry   CytatNo właśnie otóż to. Dla mnie widok jest to pl...   14.09.2008, 10:19:25
- - LBO   Cytat(Black-Berry @ 14.09.2008, 11:1...   14.09.2008, 10:26:15
- - dr_bonzo   Dane do widoku wybieram w kontrolerze, widok (zwyk...   14.09.2008, 19:55:51
- - Sedziwoj   Mi też się wydaje że problemem jest raczej ustalen...   16.09.2008, 12:38:52
- - LBO   Cytat(Sedziwoj @ 16.09.2008, 13:38:52...   16.09.2008, 12:57:24
- - dr_bonzo   U mnie, w akcji, wybierany jest typ odpowiedzi. T...   16.09.2008, 13:04:53
- - LBO   dr_bonzo: Rozumiem, że posiadasz jakis router do T...   16.09.2008, 13:22:30
- - dr_bonzo   Oczywiscie mam router, wlasnie on sie zajmuje rozp...   16.09.2008, 13:33:17
- - Sedziwoj   Od samego typu widoku nie jest zależne która ...   16.09.2008, 16:00:08
- - LBO   Cytat(Sedziwoj @ 16.09.2008, 17:00:08...   16.09.2008, 20:51:29
|- - orglee   Cytat(LBO @ 16.09.2008, 21:51:29 ) Ja...   17.09.2008, 08:57:51
- - LBO   Cytat(orglee @ 17.09.2008, 09:57:51 )...   17.09.2008, 10:01:52
- - dr_bonzo   [ot] CLI = Command Line Interface   17.09.2008, 11:02:01
- - orglee   Zależnie od architektury frameworka wynik produkow...   17.09.2008, 13:46:35
- - LBO   @orglee PHP też mozna użyć do konso...   17.09.2008, 14:17:38
- - quality   Witam. A czy ktos uzywal kiedys XSLT do renderowan...   2.03.2011, 08:47:36
|- - Speedy   Cytat(quality @ 2.03.2011, 09:47:36 )...   9.04.2011, 15:53:42
- - everth   XSLT też może być przetwarzane po stronie serwera ...   9.04.2011, 16:04:29


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: 4.10.2025 - 23:38