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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect3 id="zend.view.helpers.initial.partial">
<title>L'aide de vue Partial</title>
<para>
L'aide de vue <code>Partial</code> est utilisée pour effectuer le rendu d'un modèle
("template") spécifique dans sa propre portée de variable. L'utilisation principale est pour
les fragments réutilisables de modèle avec lesquels vous n'avez pas besoin de vous inquiéter
des conflits de noms de variable. De plus, ils vous permettent de spécifier les scripts de
vue partiels dans des modules spécifiques.
</para>
<para>
Une soeur de l'aide <code>Partial</code>, l'aide de vue de <code>PartialLoop</code>
vous permet de passer des données itératives, et effectue un rendu partiel pour chaque
élément.
</para>
<note>
<title>Compteur de PartialLoop</title>
<para>
L'aide de vue <code>PartialLoop</code> assigne une variable à la vue nommée
<code>partialCounter</code> qui fournit la position courante du tableau au script de
vue. Ce qui permet simplement d'avoir des couleurs alternatives dans les lignes d'un
tableau par exemple.
</para>
</note>
<example id="zend.view.helpers.initial.partial.usage">
<title>Utilisation de base des Partials</title>
<para>
L'utilisation de base des <code>Partials</code> est d'effectuer le rendu d'un
fragment de modèle dans sa propre portée de vue. Examinez le script partiel suivant
:
</para>
<programlisting language="php"><![CDATA[
<!--partiel.phtml-->
<ul>
<li>De : <?php echo $this->escape($this->de) ?></li>
<li>Sujet : <?php echo $this->escape($this->sujet) ?></li>
</ul>
]]></programlisting>
<para>
Vous l'appelleriez alors dans votre script de vue en utilisant ce qui suit
:
</para>
<programlisting language="php"><![CDATA[
<?php echo $this->partial('partiel.phtml', array(
'de' => 'Equipe Framework',
'sujet' => 'vues partielles')); ?>
]]></programlisting>
<para>Qui vous retournerait :</para>
<programlisting language="html"><![CDATA[
<ul>
<li>De : Equipe Framework</li>
<li>Sujet : vues partielles</li>
</ul>
]]></programlisting>
</example>
<note>
<title>Qu'est qu'un modèle ?</title>
<para>
Un modèle utilisé avec l'aide de vue <code>Partial</code> peut être un des
suivants :
</para>
<itemizedlist>
<listitem>
<para>
<emphasis>Tableaux ("array")</emphasis> : si un tableau est fourni, il
devrait être associatif, car ses paires de clé/valeur sont assignées à la vue
avec les clés comme variables de vue.
</para>
</listitem>
<listitem>
<para>
<emphasis>Objet implémentant la méthode toArray()</emphasis> : si un objet
est fourni et qu'il possède une méthode <methodname>toArray()</methodname>, le résultat de
<methodname>toArray()</methodname> sera assigné à la vue comme variable de vue.
</para>
</listitem>
<listitem>
<para>
<emphasis>Objet standard</emphasis> : tout autre objet assignera le
résultat de <methodname>object_get_vars()</methodname> (essentiellement toutes les
propriétés publiques de l'objet) à l'objet de vue.
</para>
</listitem>
</itemizedlist>
<para>
Si votre modèle est un objet, vous pouvez vouloir le fournir en tant qu'objet au
script partiel, plutôt que de le sérialiser en un tableau de variables. Vous pouvez
faire ceci en paramétrant la propriété "objectKey" de l'aide de vue approprié :
</para>
<programlisting language="php"><![CDATA[
// Tell partial to pass objects as 'model' variable
$view->partial()->setObjectKey('model');
// Tell partial to pass objects from partialLoop as 'model' variable in final
// partial view script:
$view->partialLoop()->setObjectKey('model');
]]></programlisting>
<para>
Cette technique est particulièrement utile quand vous fournissez un
<classname>Zend_Db_Table_Rowset</classname>s à <methodname>partialLoop()</methodname>, ainsi vous
avez un accès complet à vos objets <code>Row</code> à l'intérieur de vos scripts de vue,
permettant d'appeler des méthodes sur ceux-ci (comme récupérer des valeurs d'un
<code>Row</code> parent ou dépendant).
</para>
</note>
<example id="zend.view.helpers.initial.partial.partialloop">
<title>Utiliser PartialLoop pour effectuer le rendu d'éléments itératifs</title>
<para>
Typiquement, vous voudrez employer des <code>Partials</code> dans une boucle, pour
rendre le même fragment de contenu plusieurs fois ; de cette façon vous pouvez mettre de
grands blocs de contenu répété ou de logique complexe d'affichage dans un endroit
unique. Toutefois ceci a un impact d'exécution, car l'aide Partial doit être appelée une
fois par itération.
</para>
<para>
L'aide de vue <code>PartialLoop</code> résout ce problème. Elle vous permet de
fournir un élément itérable (tableau ou objet implémentant <code>Iterator</code>) comme
modèle. Elle réitère alors au-dessus de celui-ci en fournissant les éléments au script
partiel. Les éléments dans l'itérateur peuvent être n'importe quel modèle que l'aide de
vue <code>Partial</code> permet (cf. ci-dessus).
</para>
<para>Considérons le script partiel suivant :</para>
<programlisting language="php"><![CDATA[
<!--partialLoop.phtml-->
<dt><?php echo $this->key ?></dt>
<dd><?php echo $this->value ?></dd>
]]></programlisting>
<para>Et le "modèle" suivant :</para>
<programlisting language="php"><![CDATA[
$model = array(
array('key' => 'Mammifère', 'value' => 'Chameau'),
array('key' => 'Oiseau', 'value' => 'Pingouin'),
array('key' => 'Reptile', 'value' => 'Asp'),
array('key' => 'Poisson', 'value' => 'Flounder')
);
]]></programlisting>
<para>
Dans votre script de vue, vous pouvez maintenant appeler l'aide
<code>PartialLoop</code> :
</para>
<programlisting language="php"><![CDATA[
<dl>
<?php echo $this->partialLoop('partialLoop.phtml', $model) ?>
</dl>
]]></programlisting>
<programlisting language="html"><![CDATA[
<dl>
<dt>Mammifère</dt>
<dd>Chameau</dd>
<dt>Oiseau</dt>
<dd>Pingouin</dd>
<dt>Reptile</dt>
<dd>Asp</dd>
<dt>Poisson</dt>
<dd>Flounder</dd>
</dl>
]]></programlisting>
</example>
<example id="zend.view.helpers.initial.partial.modules">
<title>Effectuer le rendu partiel dans des modules différents</title>
<para>
Parfois un partiel existera dans un module différent. Si vous connaissez le nom du
module, vous pouvez le fournir comme deuxième argument à <methodname>partial()</methodname> ou à
<methodname>partialLoop()</methodname>, en déplaçant l'argument <varname>$model</varname> à la troisième
position.
</para>
<para>
Par exemple, s'il y a un gestionnaire de page partiel que vous souhaitez utiliser
et qui est dans le module "liste", vous pourriez le saisir comme suit :
</para>
<programlisting language="php"><![CDATA[
<?php echo $this->partial('pager.phtml', 'liste', $pagerData) ?>
]]></programlisting>
<para>
De cette façon, vous pouvez réutiliser des partiels créés spécifiquement pour
d'autre modules. Ceci dit, il est probablement une meilleure pratique de mettre des
partiels réutilisables dans des dossiers partagés de script de vue.
</para>
</example>
</sect3>
|