1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="learning.layout.intro">
<title>Introduction</title>
<para>
Dans une application utilisant les couches Zend Framework <acronym>MVC</acronym>,
vos scripts de vue ne seront que des blocs de <acronym>HTML</acronym> concernant
l'action demandée. Par exemple, une action "<filename>/user/list</filename>"
mènerait vers un script de vue itérant sur les utilisateurs en présentant une liste:
</para>
<programlisting language="php"><![CDATA[
<h2>Utilisateurs</h2>
<ul>
<?php if (!count($this->users)): ?>
<li>Pas d'utilisateurs</li>
<?php else: ?>
<?php foreach ($this->users as $user): ?>
<li>
<?php echo $this->escape($user->fullname) ?>
(<?php echo $this->escape($user->email) ?>)
</li>
<?php endforeach ?>
<?php endif ?>
</ul>
]]></programlisting>
<para>
Comme c'est juste un bloc de code <acronym>HTML</acronym>, ce n'est pas une page valide,
il manque le <acronym>DOCTYPE</acronym> et la balise ouvrante <acronym>HTML</acronym> puis
<acronym>BODY</acronym>. Quand seront-ils crées?
</para>
<para>
Dans les anciennes versions de Zend Framework, les développeurs créaient souvent des scripts
de vue "header" et "footer" qui servaient à cela. Ca fonctionnait certes, mais c'était
difficile à refactoriser, ou pour appeler du contenu provenant de plusieurs actions.
</para>
<para>
Le pattern
<ulink url="http://martinfowler.com/eaaCatalog/twoStepView.html">Two-Step View</ulink>
solutionne beaucoup des problèmes indiqués. Avec, la vue "application" est crée en premier,
puis injectée dans une vue "page" ainsi présentée à l'utilisateur client. la vue de page
peut être imaginée comme un template global ou layout qui décrirait des éléments communs
utilisés au travers de multiples pages.
</para>
<para>
Dans Zend Framework, <classname>Zend_Layout</classname> implémente le pattern Two-Step View.
</para>
</sect1>
|