Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Zend_Cache + Zend_Layout + Menu uzytkownika
Forum PHP.pl > Forum > PHP > Frameworki
Eagle
Witam

Ma ktoś jakiś pomysł/sposób aby nie keszować danego elementu strony (w moim wypadku jest, to menu)?

Pozdrawiam
nexis
A jak cache-ujesz to obecnie, skoro chcesz pewien element wykluczyć?
Eagle
Obecnie całym cache zajmuje się plugin (Zend_Controller_Plugin_Abstract). Jako frontend używam 'page'
Na początku cache był łapany w dispatchLoopStartup, później preDispatch jednak nie przekaże danych do layoutu.

Myślałem też aby użyć Action Helpera (Zend_Controller_Action_Helper_Abstract). Jednak nie wiem jak przerwać akcje kiedy są dane w cache.
seth-kk
generuj menu przed rozpoczeciem zbierania tresci do cache - np zbieraj tylko to podaja kontrolery zakladajac ze menu pochodzi z helpera
Eagle
Tylko w którym miejscu powinienem robić cache ?
seth-kk
na ogol plugin jest najlepszym miejscem
Eagle
Tak mam teraz.

layout.phtml
  1. <html>
  2. <head>
  3. <title>Newsy</title>
  4. </head>
  5. <body>
  6. <div class="content">
  7. <?php echo $this->layout()->content; ?>
  8. </div>
  9. <div class="menu">
  10. <?php echo $this->Menu(); ?>
  11. </div>
  12. </body>
  13. </html>


  1. class IndexController extends Zend_Controller_Action
  2. {
  3. public function indexAction()
  4. {
  5. $i = 'Ble ble ble';
  6. }
  7. }


Do cache leci cała strona - od "<html>".
Jeżeli plugin znajdzie cache, to jest pomijany cały kontroler. Więc strona nie jest renderowana na nowo = nie wyświetli się menu użytkownika.
seth-kk
wiec jesli w cache bedzie ladowalo tylko to co podaja controllery powinno spelniac oczekiwania
cos jak tutaj
Eagle
Na tym przykładzie się wzorowałem smile.gif

Jedna wersja pluginu łapie tylko dane z kontrolera, jednak nie wiem jak je przekazać do widoku.
seth-kk
jesli dobrze pamietam front controller musi wykonac przynajmniej jedna akcje wiec mozesz stworzyc kontroler/akcje ktory podaje odpowiednia tresc z cache
Eagle
Znalazłem! smile.gif
Przez przypadek ale znalazłem smile.gif

Dla potomnych:

Plugin: (link podany wyżej)
  1. if (false !== ($response = $this->_getCache()))
  2. {
  3. $response->insert('test','cache cache cache!');
  4. $response->sendResponse();
  5. }


Layout:
  1. <?php
  2. // [...]
  3. echo $this->layout()->test;
  4. // [...]
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.