Créer une layout
Vous avez remarqué que les scripts de vue dans les sections précédentes étaient des fragments de
HTML, pas des pages complètes. C'est le design: nous voulons que nos actions
retournent du contenu uniquement relatif à elles mêmes et non de l'application en général.
Maintenant nous devons introduire le contenu généré dans une page entière HTML.
Nous utiliserons une layout globale pour tout le site dans ce but.
Il y a deux designs pattern que le Zend Framework utilise pour les layouts: Two Step View et
Composite
View. Two Step View est souvent associé au pattern Transform View
l'idée de base est que les vues de l'application créent une représentation qui est ensuite injectée dans
une vue plus globale. Le pattern Composite
View traite avec une vue fabriquée à partir de plusieurs vues applicatives.
Dans Zend Framework, Zend_Layout combine les idées de ces patterns.
Plutot que chaque vue inclut tout le design, chacune ne contient que ses propres données.
Par contre vous pourriez avoir besoin occasionnelement d'informations globales dans la vue
générale. Heureusement, le Zend Framework propose une variété de conteneurs appelés
placeholders pour permettre de stocker de telles informations depuis les
scripts de vue des actions.
Pour démarrer avec Zend_Layout, nous devons d'abord informer le bootstrap
de l'objet Layout (resource). On peut activer cela au moyen de la commande
zf enable layout:
Comme le suggère la commande,
application/configs/application.ini est mis à jour et contient maintenant les
informations suivantes dans la section production:
Le fichier INI final devrait ressembler à ceci:
Cette directive indique à l'application de chercher les scripts de layout dans
application/layouts/scripts. Si vous examinez votre structure de repertoires,
vous verrez que ce dossier a été crée pour vous, avec le fichier layout.phtml.
Nous voulons aussi nous assurer que nous avons une déclaration de DocType XHTML pour notre
application. Pour activer cela, nous devons ajouter une ressource à notre bootstrap.
La manière la plus simple d'ajouter une ressource au bootstrap est de définir une méthode protégée
qui commence par _init. Dans notre cas, nous voulons initialiser le
doctype et donc nous créons une méthode _initDoctype():
Dans cette méthode, nous devons renseigner la vue au sujet du doctype. Mais d'où va provenir notre
objet de vue ? La solution simple consiste à initialiser la ressource View
et la récupérer dans la méthode de bootstrap pour l'utiliser.
Pour initialiser la vue, ajoutez la ligne suivante dans le fichier
application/configs/application.ini, dans la section
production:
Ceci indique de charger la vue avec aucune option (les '[]' indiquent que la clé "view" est un tableau
et nous ne lui passons rien du tout).
Maintenant que nous possédons une vue, retournons à notre méthode _initDoctype().
Dedans, nous allons d'abord nous assurer que la ressource View existe, puis nous la
récupèrerons et la configurerons:
bootstrap('view');
$view = $this->getResource('view');
$view->doctype('XHTML1_STRICT');
}
}
]]>
Maintenant que Zend_Layout est initialisé et que le Doctype est réglé, créons notre
vue globale de layout:
doctype() ?>
Zend Framework Quickstart Application
headLink()->appendStylesheet('/css/global.css') ?>
layout()->content ?>
]]>
Nous récupérons le contenu de l'application au moyen de l'aide de vue layout()
et nous accédons à la clé "content". Vous pouvez utiliser d'autres segments de l'objet de réponse, mais dans
la plupart des cas ce n'est pas nécessaire.
Notez aussi l'utilisation du placeholer headLink(). C'est un moyen simple de
générer du HTML pour les éléments <link> et ca permet de les garder sous le
coude au travers de l'application. Si vous devez ajouter des feuilles CSS c'est aussi possible.
Checkpoint
Allez maintenant sur "http://localhost" et regarder le code source rendu. Vous devriez voir un en-tête
XHTML, head, title, et body.