Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [CakePHP] Wykorzystanie istniejacego widoku w innym kontrolerze
kicaj
post 20.07.2008, 18:27:53
Post #1





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


Jezeli utworzylem sobie widok dla danej akcji danego kontrolera, to czy w jakis sposob moge wyswietlic ten szablon w innym kontrolerze dla innej akcji?
Chodzi o to by nie powielac widoku kontrolera, ktory jest identyczny, a tylko generuje inne dane.


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
LBO
post 20.07.2008, 19:22:32
Post #2





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

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


Nie używam Cake'a, ale zajrzałem do ich SVN. Zwróć uwagę na metodę View::render()

  1. <?php
  2. /**
  3.  * Renders view for given action and layout. If $file is given, that is used
  4.  * for a view filename (e.g. customFunkyView.ctp).
  5.  *
  6.  * @param string $action Name of action to render for
  7.  * @param string $layout Layout to use
  8.  * @param string $file Custom filename for view
  9.  * @return string Rendered Element
  10.  */
  11. View::render($action = null, $layout = null, $file = null);
  12. ?>


i to chyba jedyny sposób, by podmienić szablon. Nie ma żadnej metody View::setTemplate() itp.
Co ciekawe, nie wydaje mi się, żeby można było wybrać szablon z innego modułu/kontrolera za pomocą render().

Bardzo, bardzo niedobrze.
Go to the top of the page
+Quote Post
kejk
post 20.07.2008, 23:47:22
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 20.07.2008

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


Cytat(kicaj @ 20.07.2008, 19:27:53 ) *
Jezeli utworzylem sobie widok dla danej akcji danego kontrolera, to czy w jakis sposob moge wyswietlic ten szablon w innym kontrolerze dla innej akcji?
Chodzi o to by nie powielac widoku kontrolera, ktory jest identyczny, a tylko generuje inne dane.


Nie wiem czy dobrze cię rozumiem, bo troszkę mieszasz pojęcia (widok, szablon), ale jeśli chodzi Ci o użycie widoku jakiejś akcji w innym widoku to można to bez problemu zrobić za pomocą $this->requestAction(/jakas/akcja, array('return')). Zwykle mechanizm ten wykorzystuję w elementach. Dlaczego? Ponieważ można je łatwo cache'ować, a każdy request action powoduje jakby nowe wywołanie całego Cake'a - co bardzo obciąża system. Prosty przykład wykorzystania tego mechanizmu to wyświetlanie menu trzymanego w BD:
1) Tworzymy element menu i wstawiamy go do widoku:
Kod
<?php echo $this->element('menu',array('cache'=>'1 day')) ?>

2) W elemencie wywołujemy akcje, która zwróci nam widok z menu
Kod
<?php echo $this->requestAction('/menus/index',array('return')) ?>


Standardowo requestAction zwraca wywoływany widok bez żadnego layout'u.
Go to the top of the page
+Quote Post
LBO
post 20.07.2008, 23:53:44
Post #4





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

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


Z cała pewnością mogę powiedzieć, że koledze chodziło o szablon.
Go to the top of the page
+Quote Post
kejk
post 21.07.2008, 09:25:30
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 20.07.2008

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


Cytat(LBO @ 21.07.2008, 00:53:44 ) *
Z cała pewnością mogę powiedzieć, że koledze chodziło o szablon.


Może kolega sam się wypowie o co mu chodziło.
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: 21.06.2025 - 20:02