Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonsoir,
Jusque là je mets en cache seulement des requetes, en fait j'aimerais bien savoir comment mettre proprement une action en cache sans le header et footer, pour éviter des traitements inutiles.
Alors est ce possible déjà ?
Merci
Hors ligne
Personne a une solution pour ce problème ?
Hors ligne
Tu peux créer un plugin qui fonction en preDispatch. Le plugin doit vérifier s'il existe ou pas un cache pour l'action demandé, s'il n'en existe pas, on ajoute un paramètre au contrôleur frontale disant que l'action se trouve en cache, ajouter le rendu de l'action dans la réponse et désactiver le ViewRenderer.
if($cache->hasCache(monid)) { $segment = $cache->get(monid); $fc = Zend_Controller_Front::getInstance(); $fc->setParam('actionInCache', true); $fc->setParam('noViewRenderer', true); $segmentName = Zend_Controller_Action_HelperBroker::getExistingHelper(ViewRenderer)->getResponseSegment(); $response->appendBody( $segment, $segmentName ); }
Ensuite dans l'action on vérifie si elle se trouve en cache, si non on exécute notre action et on la met en cache.
if(!Zend_Controller_Front::getInstance()->getParam('actionInCache')) { //Traitement et ajout en cache. }
Se code n'a pas été testé, ce n'est peut-être pas la meilleur solution, mais c'est la première qui m'est venu a l'esprit.
Hors ligne
je viens de tomber sur un article qui pourrait t'être utile.
http://devzone.zend.com/article/3372-Fr … -Framework
Hors ligne
Oui j'avais deja consulter cette page, mais ils proposent un plugin de cache, mais c'est un cache sur toute la page.
Seul moyen que j'ai trouvé est de faire comme ceci:
Dans le controller
public function indexAction() { $this->view->cache = $this->cache; if ($this->cache->test("id_cache") != true) { // Traitement .................... } }
Dans la vue
<?php $this->headTitle("Nystagmus.fr - Site francophone"); if (!$this->cache->start('id_page')) { ?> // HTML $this->cache->end(); <?php } ?>
C'est pas très élégant mais ca marche, je met en cache que la partie content du layout.
Si vous avez mieux je suis preneur.
Merci 3uclide
Dernière modification par alien7 (21-04-2009 21:00:03)
Hors ligne
La première méthode que je t'ai proposé devrait normalement seulement mettre en cache ta vue... et non le layout.
Hors ligne
Bah à vrai dire je le comprends pas tres bien la 1ere methode, si tu pouvais un peu plus le détailler par exemple ca serait bien
Hors ligne
Pages: 1