Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Hello,
Question toute conne :
Je souhaite inclure dans mon phtml un autre phtml ou le rendu d'une action pariculière.
En effet, je souhaite que mon header et mon footer soient inclus dans toutes mes actions.
Quelles sont les solutions possibles ?
Merci d'avance.
Eric
Hors ligne
Salut, j'ai effectué la même opération que toi, et voila ce que j'ai fait. Je suis loin d'etre un expert cependant, donc peut etre qu'il faudra me corriger. Voilà ce que j'ai fait :
Dans mon fichier bootstrap (index.php du dossier html (ou public ):
$actionStack = Zend_Controller_Action_HelperBroker::getStaticHelper('actionStack'); // la section de la page, et le controleur qui va l'utiliser //le controlleur index va rendre l'action footerAction dans la vue footer $actionStack->actionToStack('footer','index'); //idem $actionStack->actionToStack('menu','menu'); //idem $actionStack->actionToStack('header','index');
On envoie dans chaque section, le resultat du controlleur (spécifié en deuxieme parametre)
en l'occurence, dans mon cas, chaque page a une section header footer et menu, qui est générée par le controlleur de l'index avec les action footerAction...Etc...
a savoir que dans le fichier index.php j'ai aussi quelque chose qui me permet d'utiliser le layout :
$layout =Zend_Layout::startMvc($config->layout);
et un fichier config.ini où il y a les parametres du layout :
layout.layout = template layout.contentKey = contenu layout.layoutPath = "../application/layouts"
comme on peut le remarquer, j'ai un fichier template.phtml dans le dossier MARACINE/application/layouts
dans mon fichier template.phtm:
<div id="footer"><?php echo $this->layout()->footer ?> </div> <!--et pareil pour toutes les sections-->
et pour finir dans mon indexController :
public function headerAction() { $this->_helper->viewRenderer->setResponseSegment('header'); } //pareil pour toutes les sections.
Voilà.
En espérant t'avoir aidé!
Dernière modification par gostbuster (15-04-2009 17:01:39)
Hors ligne
Hello,
Merci bcp pour avoir pris le temps de me répondre de manière précise.
Je vais creuser ta solution et l'implémenter.
A+.
Hors ligne
avec plaisir
Hors ligne
<div id="footer"><?php echo $this->layout()->footer ?> </div>
moi il ne m'affiche pas le footer ...
pourtant j'ai un "controllers/ footerController.php"
un "layouts/footer.phml"
Hors ligne
Salut,
Je n'ai pas de footerController ........heu
En fait finalement j'ai changé de technique......Je vais maintenant te mentionner la technique a utiliser qui semble etre plus propre :
dans ton bootstrap :
$layout =Zend_Layout::startMvc($config->layout); $view = new Zend_View(); $view->setEncoding('UTF-8'); $view->strictVars(true); $view->doctype('XHTML1_TRANSITIONAL'); $view->addHelperPath('Zend/Dojo/View/Helper/', 'Zend_Dojo_View_Helper'); $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view); Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
Il te faut aussi un fichier de config. Dans ce fichier il y aura ceci :
layout.layout = "template" layout.contentKey = "contenu" layout.layoutPath = "../application/views/layouts"
ensuite, ton fichier template.phtml :
<?php echo $this->doctype(); //echo $this->doctype("XHTML1_TRANSITIONAL"),PHP_EOL; ?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <?php echo $this->headMeta() ->setHttpEquiv('Content-type', 'text/html; charset=utf-8') ->setHttpEquiv('lang','fr') ->setHttpEquiv('imagetoolbar','no') ->setName('author','............') ->setName('generator','ZendFramework 1.6') ->setName('Language','fr'); ?> </head> <body class="tundra"> <div id="header"> <?php echo $this->partial('common/header.phtml',array('pageTitle'=>/*$this->titre*/''));?> </div> <!-- ><div id="menu"> <?php// echo $this->layout()->menu ?> </div> --> <!--contenu--> <div id="contenu"><?php echo $this->layout()->contenu ?> </div> <!-- footer --> <div id="footer"><?php echo $this->partial('common/footer.phtml'); ?> </div></body></html>
Si j'ai rien oublié, ca devrait fonctionner. Voilà
Hors ligne