Zend_Layout - Démarrage rapide
Il y a deux modes d'utilisation de Zend_Layout : avec Zend
Framework MVC, et sans.
Scripts de layout
Dans tous les cas, un script de layout est nécessaire. Les scripts de layout
utilisent simplement Zend_View (ou une implémentation particulière personnalisée). Les
variables de layout sont enregistrées dans le placeholder Layout,
et peuvent être accédées via l'aide de vue placeholder ou directement en tant que
propriétés de l'objet layout.
Par exemple :Mon Site
layout()->content;
// récupère la clé "foo" via l'aide de vue placeholder :
echo $this->placeholder('Zend_Layout')->foo;
// récupère l'objet layout, et accède à diverses clés :
$layout = $this->layout();
echo $layout->bar;
echo $layout->baz;
?>
]]>
Toutes les aides de vue enregistrées sont accessibles dans
Zend_Layout car il utilise Zend_View pour
son propre rendu. Vous pouvez aussi accéder aux variables de la vue. Les aides placeholder sont très pratiques
pour l'accès aux éléments tels que <head>, les scripts, les méta, etc. :
headTitle() ?>
headScript() ?>
headStyle() ?>
render('header.phtml') ?>
placeholder('nav') ?>
layout()->content ?>
render('footer.phtml') ?>
]]>Utilisation de Zend_Layout avec le système MVC de Zend FrameworkZend_Controller propose une manière d'étendre ses
fonctionnalités au travers de plugins de
contrôleur frontal et d'aides
d'action. Zend_View propose aussi des aides. Zend_Layout utilise
toutes ces possibilités lorsqu'employé avec les composants MVC.
Zend_Layout::startMvc() crée une instance de
Zend_Layout avec des paramètres de configuration optionnels.
Cette méthode enregistre aussi un plugin de contrôleur frontal qui s'occupe du rendu du
layout rempli, lorsque la boucle de distribution est terminée. Elle enregistre également
une aide d'action qui permet aux actions d'accéder à l'objet layout. Enfin,
l'aide de vue layout, elle, donne accès à l'objet layout depuis la vue.
Regardons d'abord comment initialiser Zend_Layout afin de l'utiliser dans un
contexte MVC
startMvc() peut prendre en paramètre un tableau d'options ou un objet
Zend_Config pour personnaliser l'instance. Ces options sont
détaillées dans .
Dans le contrôleur d'action, vous pouvez donc accéder à l'instance de layout via
l'aide d'action :
_helper->layout->disableLayout();
}
public function bazAction()
{
// utilise un script de layout différent pour
// cette action
$this->_helper->layout->setLayout('foobaz');
};
}
]]>
Dans vos scripts de vue, utiliser l'aide layout pour accéder à
l'instance de Zend_Layout. Notez que cette aide est différente
des autres car elle ne retourne pas une chaîne, mais bien un objet. Vous pouvez donc
enchaîner une méthode immédiatement :
layout()->setLayout('foo'); // utilise un script de layout spécifique
]]>
Autrement, vous pouvez n'importe où accéder à votre instance de
Zend_Layout via la méthode statique getMvcInstance()
:
Enfin, le plugin de contrôleur frontal Zend_Layout dispose
d'une caractéristique annexe au rendu automatique du layout : il analyse les segments de
l'objet de réponse et les assigne en tant que variables de layout dans vos scripts de
layout. Le segment "default" est assigné à la variable "content". Ceci permet de mettre
la main sur le contenu rendu dans l'action principale.
Par exemple, supposons que votre code rencontre d'abord
FooController::indexAction(), qui va rendre du contenu dans le segment par
défaut de la réponse. Ensuite il forward vers NavController::menuAction(),
qui rend son contenu dans un segment nommé 'nav'. Enfin, vous forwardez vers
CommentController::fetchAction() pour récupérer des commentaires, mais vous
les rendez aussi dans le segment par défaut de la réponse (ce qui va rajouter du
contenu). Votre script de layout peut alors rendre chaque segment de manière séparée
: