Zend_View-Helpers.xml 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.view.helpers" xmlns:xi="http://www.w3.org/2001/XInclude">
  5. <title>Aides de vue</title>
  6. <para>
  7. Dans vos scripts de vue, il est souvent nécessaire d'effectuer certaines actions
  8. complexes encore et encore : par exemple, formater une date, générer des éléments de
  9. formulaire, afficher des liens d'action. Vous pouvez utiliser des classes d'aide pour
  10. effectuer ce genre de tâches.
  11. </para>
  12. <para>
  13. Une aide est simplement une classe. Par exemple, nous voulons une aide nommée
  14. "foobar". Par défaut, la classe est préfixée avec <code>"Zend_View_Helper_"</code> (vous
  15. pouvez spécifier un préfixe personnalisé en paramétrant votre chemin d'aide), et le dernier
  16. segment du nom de classe est le nom de l'aide ; ce segment peut être avec des
  17. CaracteresMajuscules ; le nom complet de la classe est alors :
  18. <classname>Zend_View_Helper_FooBar</classname>. Cette classe doit contenir au moins une
  19. méthode, nommée comme l'aide avec la notationCamel : <methodname>fooBar()</methodname>.
  20. </para>
  21. <note>
  22. <title>Surveillez la casse</title>
  23. <para>
  24. Les noms des aides sont toujours en notationCamel, c'est-à-dire qu'ils ne
  25. commencent pas avec un caractère majuscule. Le nom de classe elle-même peut être en
  26. casseMélangée, mais la méthode qui est exécutée est en notationCamel.
  27. </para>
  28. </note>
  29. <para>
  30. Pour utiliser une aide dans votre script de vue, appelez la en utilisant
  31. <code>$this-&gt;nomAide()</code>. Dans les coulisses, <classname>Zend_View</classname> va
  32. charger la classe <classname>Zend_View_Helper_NomAide</classname>, créer une instance de cet
  33. objet, et appeler sa méthode <methodname>nomAide()</methodname>. L'instance de l'objet est persistante
  34. dans l'instance de <classname>Zend_View</classname>, et est réutilisée pour tous les appels
  35. futurs à <code>$this-&gt;nomAide()</code>.
  36. </para>
  37. <sect2 id="zend.view.helpers.initial">
  38. <title>Aides initiales</title>
  39. <para>
  40. <classname>Zend_View</classname> fournit avec un jeu initial de classes d'aides,
  41. la plupart est liée à la génération d'éléments de formulaire. Chacune affiche et échappe
  42. l'élément automatiquement. De plus, il existe des aides pour créer des <acronym>URL</acronym>s sur la base
  43. de routes et des listes HTML, de la même manière que l'on déclarerait des variables. Les
  44. aides actuellement incluses sont :
  45. </para>
  46. <itemizedlist>
  47. <listitem>
  48. <para>
  49. <methodname>declareVars()</methodname> : initialement prévu pour être utilisé avec
  50. <methodname>strictVars()</methodname>, cette aide peut être utilisée pour déclarer les
  51. variables de modèle ("template") qui sont (ou pas) déjà déclarées dans l'objet
  52. de vue, ou pour gérer des valeurs par défaut. Les tableaux passés comme
  53. arguments à la méthode seront utilisés pour paramétrer des valeurs par défaut ;
  54. sinon, si la variable n'existe pas, on lui affecte une chaîne vide.
  55. </para>
  56. </listitem>
  57. <listitem>
  58. <para>
  59. <methodname>fieldset($name, $content, $attribs)</methodname> : crée un ensemble de
  60. champs <acronym>XHTML</acronym>. Si <varname>$attribs</varname> contient une clé "legend", cette valeur
  61. sera utilisée comme légende du fieldset. Le fieldset entourera le contenu
  62. <varname>$content</varname> tel qu'il aura été fourni à l'aide.
  63. </para>
  64. </listitem>
  65. <listitem>
  66. <para>
  67. <methodname>form($name, $attribs, $content)</methodname> : génère un formulaire <acronym>XHTML</acronym>.
  68. Tous les éléments <varname>$attribs</varname> sont échappés et rendus sous la forme
  69. d'attributs de la balise "form". Si <varname>$content</varname> est présent et n'est
  70. pas un booléen valant <constant>FALSE</constant>, alors ce contenu est rendu à
  71. l'intérieur des balises "form" ; si <varname>$content</varname> est un booléen valant
  72. <constant>FALSE</constant> (par défaut), seul la balise ouvrante "form" est
  73. générée.
  74. </para>
  75. </listitem>
  76. <listitem>
  77. <para>
  78. <methodname>formButton($name, $value, $attribs)</methodname> : crée un élément
  79. &lt;button /&gt;.
  80. </para>
  81. </listitem>
  82. <listitem>
  83. <para>
  84. <code>formCheckbox($name, $value, $attribs, $options):</code> crée un
  85. élément &lt;input type="checkbox" /&gt;.
  86. </para>
  87. <para>
  88. Par défaut, quand aucune <varname>$value</varname> n'est fournie et qu'aucune
  89. <varname>$options</varname> n'est présente, alors "0" est considéré comme la valeur
  90. non cochée et "1" comme la valeur cochée. Si une <varname>$value</varname> est
  91. fournie, mais qu'aucune <varname>$options</varname> n'est présente, l'état coché est
  92. considéré égal à la <varname>$value</varname> fournie.
  93. </para>
  94. <para>
  95. <varname>$options</varname> devrait être un tableau. Si ce tableau est indexé,
  96. la première valeur est la valeur cochée, la seconde est la valeur non cochée ;
  97. et tout autre valeur est ignorée. Vous pouvez aussi passer un tableau associatif
  98. avec les clés "<code>checked</code>" et "<code>unChecked</code>".
  99. </para>
  100. <para>
  101. Si <varname>$options</varname> est fourni, et que <varname>$value</varname> correspond
  102. à la valeur cochée, alors l'élément sera marqué comme coché. Vous pouvez aussi
  103. marquer l'élément comme coché ou décoché en passant une valeur booléenne à
  104. l'attribut "<code>checked</code>".
  105. </para>
  106. <para>Ceci pourra sûrement être plus explicite avec quelques exemples :</para>
  107. <programlisting language="php"><![CDATA[
  108. // "1" et "0" en tant qu'options cochée/décochée ; cochée
  109. echo $this->formCheckbox('foo');
  110. // "1" et "0" en tant qu'options cochée/décochée ; cochée
  111. echo $this->formCheckbox('foo', null, array('checked' => true));
  112. // "bar" et "0" en tant qu'options cochée/décochée ; décochée
  113. echo $this->formCheckbox('foo', 'bar');
  114. // "bar" et "0" en tant qu'options cochée/décochée ; cochée
  115. echo $this->formCheckbox('foo', 'bar', array('checked' => true));
  116. // "bar" et "baz" en tant qu'options cochée/décochée ; décochée
  117. echo $this->formCheckbox('foo', null, null, array('bar', 'baz'));
  118. // "bar" et "baz" en tant qu'options cochée/décochée ; décochée
  119. echo $this->formCheckbox('foo', null, null, array(
  120. 'checked' => 'bar',
  121. 'unChecked' => 'baz'
  122. ));
  123. // "bar" et "baz" en tant qu'options cochée/décochée ; cochée
  124. echo $this->formCheckbox('foo', 'bar', null, array('bar', 'baz'));
  125. echo $this->formCheckbox('foo',
  126. null,
  127. array('checked' => true),
  128. array('bar', 'baz'));
  129. // "bar" et "baz" en tant qu'options cochée/décochée ; décochée
  130. echo $this->formCheckbox('foo', 'baz', null, array('bar', 'baz'));
  131. echo $this->formCheckbox('foo',
  132. null,
  133. array('checked' => false),
  134. array('bar', 'baz'));
  135. ]]></programlisting>
  136. <para>
  137. Dans tous les cas, la balise est précédée d'un élément masqué ("hidden")
  138. avec la valeur de l'état décoché ; ainsi, si la valeur est décochée, vous aurez
  139. toujours une valeur valide retournée par votre formulaire.
  140. </para>
  141. </listitem>
  142. <listitem>
  143. <para>
  144. <methodname>formErrors($errors, $options)</methodname> : génère une liste non ordonnée
  145. <acronym>XHTML</acronym> pour montrer des erreurs. <varname>$errors</varname> peut être une chaîne de
  146. caractères ou un tableau de chaînes ; <varname>$options</varname> peut être tout
  147. attribut que vous pourriez vouloir placer dans la balise ouvrante de la
  148. liste.
  149. </para>
  150. <para>
  151. Vous pouvez spécifier des éléments ouvrants, fermants et des séparateurs
  152. de contenu alternatifs lors du rendu des erreurs en appelant les différentes
  153. méthodes suivantes de l'aide :
  154. </para>
  155. <itemizedlist>
  156. <listitem>
  157. <para>
  158. <methodname>setElementStart($string)</methodname> ; par défaut vaut "&lt;ul
  159. class="errors"%s"&gt;&lt;li&gt;", où <code>%s</code> est remplacé avec
  160. les attributs spécifiés dans <varname>$options</varname>.
  161. </para>
  162. </listitem>
  163. <listitem>
  164. <para>
  165. <methodname>setElementSeparator($string)</methodname> ; par défaut vaut
  166. "&lt;/li&gt;&lt;li&gt;".
  167. </para>
  168. </listitem>
  169. <listitem>
  170. <para>
  171. <methodname>setElementEnd($string)</methodname> ; par défaut vaut
  172. "&lt;/li&gt;&lt;/ul&gt;".
  173. </para>
  174. </listitem>
  175. </itemizedlist>
  176. </listitem>
  177. <listitem>
  178. <para>
  179. <methodname>formFile($name, $attribs)</methodname>: crée un élément &lt;input
  180. type="file" /&gt;.
  181. </para>
  182. </listitem>
  183. <listitem>
  184. <para>
  185. <methodname>formHidden($name, $value, $attribs)</methodname> : crée un élément
  186. &lt;input type="hidden" /&gt;.
  187. </para>
  188. </listitem>
  189. <listitem>
  190. <para>
  191. <methodname>formLabel($name, $value, $attribs)</methodname> : crée un élément
  192. &lt;label&gt;, en réglant l'attribut <code>for</code> avec <varname>$name</varname>,
  193. et le texte du label avec <varname>$value</varname>. Si <code>disable</code> est
  194. fourni via <code>attribs</code>, rien n'est retourné.
  195. </para>
  196. </listitem>
  197. <listitem>
  198. <para>
  199. <code>formMultiCheckbox($name, $value, $attribs, $options,
  200. $listsep)</code> : crée une liste de cases à cocher. <varname>$options</varname>
  201. devrait être un tableau associatif, avec une profondeur arbitraire.
  202. <varname>$value</varname> peut être une valeur unique ou un tableau de valeurs
  203. sélectionnées qui correspondent aux clés du tableau <varname>$options</varname>.
  204. <varname>$listsep</varname> est un séparateur HTML ("&lt;br /&gt;") par défaut. Par
  205. défaut, cet élément est traité comme un tableau ; toutes les cases à cocher
  206. partagent le même nom, et sont soumises sous la forme d'un tableau.
  207. </para>
  208. </listitem>
  209. <listitem>
  210. <para>
  211. <methodname>formPassword($name, $value, $attribs)</methodname> : crée un élément
  212. &lt;input type="password" /&gt;.
  213. </para>
  214. </listitem>
  215. <listitem>
  216. <para>
  217. <methodname>formRadio($name, $value, $attribs, $options)</methodname> : crée une série
  218. d'éléments &lt;input type="button" /&gt;, un pour chaque élément
  219. <varname>$options</varname>. Dans le tableau <varname>$options</varname>, la clé de
  220. l'élément est la valeur du radio, et la valeur de l'élément est l'étiquette du
  221. radio. La radio <varname>$value</varname> sera précochée pour vous.
  222. </para>
  223. </listitem>
  224. <listitem>
  225. <para>
  226. <methodname>formReset($name, $value, $attribs)</methodname> : crée un élément
  227. &lt;input type="reset" /&gt;.
  228. </para>
  229. </listitem>
  230. <listitem>
  231. <para>
  232. <methodname>formSelect($name, $value, $attribs, $options)</methodname> : crée un bloc
  233. &lt;select&gt;...&lt;/select&gt;, avec une &lt;option&gt; pour chaque élément
  234. <varname>$options</varname>. Dans le tableau <varname>$options</varname>, la clé de
  235. l'élément est la valeur de l'option, et la valeur de l'élément est son étiquette
  236. optionnelle. L'option (ou les options) <varname>$value</varname> sera (ou seront)
  237. présélectionnée(s) pour vous.
  238. </para>
  239. </listitem>
  240. <listitem>
  241. <para>
  242. <methodname>formSubmit($name, $value, $attribs)</methodname> : crée un élément
  243. &lt;input type="submit" /&gt;.
  244. </para>
  245. </listitem>
  246. <listitem>
  247. <para>
  248. <methodname>formText($name, $value, $attribs)</methodname> : crée un élément &lt;input
  249. type="text" /&gt;.
  250. </para>
  251. </listitem>
  252. <listitem>
  253. <para>
  254. <methodname>formTextarea($name, $value, $attribs)</methodname> : crée un bloc
  255. &lt;textarea&gt;...&lt;/textarea&gt;.
  256. </para>
  257. </listitem>
  258. <listitem>
  259. <para>
  260. <methodname>url($urlOptions, $name, $reset)</methodname> : crée un <acronym>URL</acronym> basé sur une
  261. route nommée. <varname>$urlOptions</varname> doit être un tableau associatif avec des
  262. paires de clés/valeurs utilisées par une route particulière.
  263. </para>
  264. </listitem>
  265. <listitem>
  266. <para>
  267. <methodname>htmlList($items, $ordered, $attribs, $escape)</methodname> : génère des
  268. listes ordonnées ou non basées sur les <varname>$items</varname> qui lui sont fournis.
  269. Si <varname>$items</varname> est un tableau multidimensionnel, une liste imbriquée
  270. sera construite. Si le paramètre <varname>$escape</varname> vaut <constant>TRUE</constant>
  271. (valeur par défaut), chaque élément sera échappé en utilisant le mécanisme
  272. d'échappement enregistré dans les objets de vue ; fournissez une valeur
  273. <constant>FALSE</constant> si vous voulez autoriser du balisage dans vos listes.
  274. </para>
  275. </listitem>
  276. </itemizedlist>
  277. <para>
  278. Les utiliser dans vos script de vue est très simple, voici un exemple. Notez que
  279. tout ce dont vous avez besoin, c'est de les appeler; elles vont se charger et
  280. s'instancier elle-même si besoin est.
  281. </para>
  282. <programlisting language="php"><![CDATA[
  283. <!--
  284. Dans votre script de vue, $this se réfère à l'instance de Zend_View.
  285. Partons du principe que vous avez déjà assigné une série d'options
  286. de sélection dans un tableau $pays =
  287. array('us' => 'Etats-Unis', 'fr' => 'France', 'de' => 'Allemagne').
  288. -->
  289. <form action="action.php" method="post">
  290. <p><label>Votre email :
  291. <?php echo $this->formText('email',
  292. 'vous@exemple.fr',
  293. array('size' => 32)) ?>
  294. </label></p>
  295. <p><label>Votre pays :
  296. <?php echo $this->formSelect('country',
  297. 'us',
  298. null,
  299. $this->pays) ?>
  300. </label></p>
  301. <p><label>??? Would you like to opt in ???
  302. <?php echo $this->formCheckbox('opt_in',
  303. 'oui',
  304. null,
  305. array('oui', 'non')) ?>
  306. </label></p>
  307. </form>
  308. ]]></programlisting>
  309. <para>La sortie résultante du script de vue ressemblera à ceci :</para>
  310. <programlisting language="php"><![CDATA[
  311. <form action="action.php" method="post">
  312. <p><label>Votre email :
  313. <input type="text" name="email"
  314. value="vous@exemple.fr" size="32" />
  315. </label></p>
  316. <p><label>Votre pays :
  317. <select name="country">
  318. <option value="us" selected="selected">Etats-Unis</option>
  319. <option value="fr">France</option>
  320. <option value="de">Allemagne</option>
  321. </select>
  322. </label></p>
  323. <p><label>??? Would you like to opt in ???
  324. <input type="hidden" name="opt_in" value="non" />
  325. <input type="checkbox" name="opt_in"
  326. value="oui" checked="checked" />
  327. </label></p>
  328. </form>
  329. ]]></programlisting>
  330. <xi:include href="Zend_View-Helpers-Action.xml" />
  331. <xi:include href="Zend_View-Helpers-BaseUrl.xml">
  332. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-BaseUrl.xml" /></xi:fallback>
  333. </xi:include>
  334. <xi:include href="Zend_View-Helpers-Currency.xml">
  335. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Currency.xml" /></xi:fallback>
  336. </xi:include>
  337. <xi:include href="Zend_View-Helpers-Cycle.xml">
  338. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Cycle.xml" /></xi:fallback>
  339. </xi:include>
  340. <xi:include href="Zend_View-Helpers-Partial.xml" />
  341. <xi:include href="Zend_View-Helpers-Placeholder.xml" />
  342. <xi:include href="Zend_View-Helpers-Doctype.xml" />
  343. <xi:include href="Zend_View-Helpers-Gravatar.xml">
  344. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Gravatar.xml" /></xi:fallback>
  345. </xi:include>
  346. <xi:include href="Zend_View-Helpers-HeadLink.xml" />
  347. <xi:include href="Zend_View-Helpers-HeadMeta.xml" />
  348. <xi:include href="Zend_View-Helpers-HeadScript.xml" />
  349. <xi:include href="Zend_View-Helpers-HeadStyle.xml" />
  350. <xi:include href="Zend_View-Helpers-HeadTitle.xml" />
  351. <xi:include href="Zend_View-Helpers-HtmlObject.xml" />
  352. <xi:include href="Zend_View-Helpers-InlineScript.xml" />
  353. <xi:include href="Zend_View-Helpers-Json.xml" />
  354. <xi:include href="Zend_View-Helpers-Navigation.xml">
  355. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Navigation.xml" /></xi:fallback>
  356. </xi:include>
  357. <xi:include href="Zend_View-Helpers-TinySrc.xml">
  358. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-TinySrc.xml" /></xi:fallback>
  359. </xi:include>
  360. <xi:include href="Zend_View-Helpers-Translate.xml" />
  361. <xi:include href="Zend_View-Helpers-UserAgent.xml">
  362. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-UserAgent.xml" /></xi:fallback>
  363. </xi:include>
  364. </sect2>
  365. <sect2 id="zend.view.helpers.paths">
  366. <title>Chemin des aides</title>
  367. <para>
  368. Comme pour les scripts de vue, votre contrôleur peut spécifier une pile de chemins
  369. dans lesquels <classname>Zend_View</classname> cherchera les classes d'aides. Par
  370. défaut, <classname>Zend_View</classname> cherche dans "Zend/View/Helper/*". Vous pouvez
  371. dire à <classname>Zend_View</classname> de regarder dans d'autres chemins en utilisant
  372. les méthodes <methodname>setHelperPath()</methodname> et <methodname>addHelperPath()</methodname>. De plus, vous
  373. pouvez indiquer un préfixe de classe pour utiliser les aides dans le répertoire fourni,
  374. et permettre de donner des espaces de noms à vos classes d'aide. Par défaut, si aucun
  375. préfixe n'est fourni, "Zend_View_Helper_" est utilisé.
  376. </para>
  377. <programlisting language="php"><![CDATA[
  378. $view = new Zend_View();
  379. $view->setHelperPath('/chemin/vers/plus/de/classes/d-aides',
  380. 'Ma_View_Helper');
  381. ]]></programlisting>
  382. <para>
  383. En fait, vous pouvez "empiler" les chemins en utilisant la méthode
  384. <methodname>addHelperPath()</methodname>. Comme vous ajoutez des chemins dans la pile,
  385. <classname>Zend_View</classname> va regarder dans le chemin le plus récemment ajouté,
  386. pour inclure la classe d'aide. Cela vous permet d'ajouter (ou bien de redéfinir) la
  387. distribution initiale des aides, avec vos propres aides personnalisées.
  388. </para>
  389. <programlisting language="php"><![CDATA[
  390. $view = new Zend_View();
  391. // Ajoute /chemin/vers/des/aides avec le préfixe
  392. // de classe 'Ma_View_Helper'
  393. $view->addHelperPath('/chemin/vers/des/aides',
  394. 'Ma_View_Helper');
  395. // Ajoute /autre/chemin/vers/des/aides avec le préfixe
  396. // de classe 'Votre_View_Helper'
  397. $view->addHelperPath('/autre/chemin/vers/des/aides',
  398. 'Votre_View_Helper');
  399. // maintenant, lorsque vous appelerez $this->helperName(), Zend_View
  400. // va rechercher en premier /autre/chemin/vers/des/aides/HelperName.php
  401. // en utilisant la classe "Votre_View_Helper_HelperName", et ensuite
  402. // dans /chemin/vers/des/aides/HelperName.php en utilisant la classe
  403. // "Ma_View_Helper_HelperName", et finalement dans
  404. // Zend/View/Helpers/HelperName.php en utilisant la classe
  405. // "Zend_View_Helper_HelperName"
  406. ]]></programlisting>
  407. </sect2>
  408. <sect2 id="zend.view.helpers.custom">
  409. <title>Écrire des aides personnalisées</title>
  410. <para>
  411. Écrire des aides personnalisées est facile, vous devez juste suivre ces règles
  412. :
  413. </para>
  414. <itemizedlist>
  415. <listitem>
  416. <para>
  417. Bien qu'il ne soit pas strictement nécessaire, il est recommandé soit
  418. d'implémenter <classname>Zend_View_Helper_Interface</classname> ou d'étendre
  419. <classname>Zend_View_Helper_Abstract</classname> quand vous créez vos aides.
  420. Introduit en 1.6.0, ceux-ci définissent la méthode <methodname>setView()</methodname> ;
  421. cependant, dans les prochaines releases, nous prévoyons d'implémenter un motif
  422. de conception Stratégie qui permettra de simplifier en grande partie le schéma
  423. de nomination détaillé ci-dessous. Contruire sur ces bases à partir de
  424. maintenant vous aidera pour vos codes futurs.
  425. </para>
  426. </listitem>
  427. <listitem>
  428. <para>
  429. Le nom de la classe doit, au minimum, se terminer avec le nom de l'aide en
  430. utilisant une notation en casseMélangée. Par exemple, si vous écrivez une aide
  431. appelée "actionSpeciale", le nom de la classe doit être au minimum
  432. "ActionSpeciale". Vous devriez donner au nom de la classe un préfixe, et il est
  433. recommandé d'utiliser "Ma_View_Helper" comme partie de ce préfixe :
  434. "Ma_View_Helper_ActionSpeciale". (Vous devez alors fournir le préfixe, avec ou
  435. sans le tiret bas, à <methodname>addHelperPath()</methodname> ou à
  436. <methodname>setHelperPath()</methodname>).
  437. </para>
  438. </listitem>
  439. <listitem>
  440. <para>
  441. La classe doit avoir une méthode publique dont le nom correspond au nom de
  442. l'aide ; c'est la méthode qui sera appelée quand votre template appellera
  443. <code>$this-&gt;actionSpeciale()</code>. Dans notre exemple
  444. <code>$this-&gt;actionSpeciale()</code>, la déclaration de méthode requise
  445. serait <code>public function actionSpeciale()</code>.
  446. </para>
  447. </listitem>
  448. <listitem>
  449. <para>
  450. En général, la classe ne devrait pas afficher directement les données (via
  451. <code>echo</code> ou <code>print</code>). Elle devrait retourner les valeurs
  452. pour être ensuite affichées. Les valeurs retournées devrait être échappées de
  453. façon appropriées.
  454. </para>
  455. </listitem>
  456. <listitem>
  457. <para>
  458. La classe doit être dans un fichier ayant le même nom que la méthode
  459. d'aide. Si on utilise la méthode <methodname>actionSpeciale()</methodname>, le fichier devra
  460. être nommé "ActionSpeciale.php"
  461. </para>
  462. </listitem>
  463. </itemizedlist>
  464. <para>
  465. Placez le fichier de classe d'aide quelque part dans la pile des chemins d'aide,
  466. et <classname>Zend_View</classname> le chargera, l'instanciera, le rendra persistant, et
  467. l'exécutera automatiquement pour vous.
  468. </para>
  469. <para>Voici un exemple de fichier "ActionSpeciale.php" :</para>
  470. <programlisting language="php"><![CDATA[
  471. class Ma_View_Helper_ActionSpeciale
  472. {
  473. protected $_count = 0;
  474. public function actionSpeciale()
  475. {
  476. $this->_count++;
  477. $output = "J'ai vu 'The Big Lebowsky' {$this->_count} fois.";
  478. return htmlspecialchars($output);
  479. }
  480. }
  481. ]]></programlisting>
  482. <para>
  483. Ensuite, dans un script de vue, vous pouvez appeler l'aide
  484. <code>ActionSpeciale</code> autant de fois que vous le souhaitez ; elle sera instanciée
  485. une fois, et rendue persistante pendant toute la vie de l'instance de
  486. <classname>Zend_View</classname>.
  487. </para>
  488. <programlisting language="php"><![CDATA[
  489. // rappelez vous, $this se réfère à l'instance de Zend_View
  490. echo $this->actionSpeciale();
  491. echo $this->actionSpeciale();
  492. echo $this->actionSpeciale();
  493. ]]></programlisting>
  494. <para>La sortie pourrait alors ressembler à ceci :</para>
  495. <programlisting language="php"><![CDATA[
  496. J'ai vu 'The Big Lebowsky' 1 fois.
  497. J'ai vu 'The Big Lebowsky' 2 fois.
  498. J'ai vu 'The Big Lebowsky' 3 fois.
  499. ]]></programlisting>
  500. <para>
  501. Quelquefois vous devez accéder à l'objet <classname>Zend_View</classname> appelant
  502. - par exemple, si vous devez utiliser l'encodage enregistré ou voulez effectuer le rendu
  503. d'un autre script de vue comme une sous partie de votre aide. Pour avoir accès à votre
  504. objet de vue, votre classe d'aide doit avoir une méthode <methodname>setView($view)</methodname>,
  505. comme ceci :
  506. </para>
  507. <programlisting language="php"><![CDATA[
  508. class Ma_View_Helper_ScriptPath
  509. {
  510. public $view;
  511. public function setView(Zend_View_Interface $view)
  512. {
  513. $this->view = $view;
  514. }
  515. public function scriptPath($script)
  516. {
  517. return $this->view->getScriptPath($script);
  518. }
  519. }
  520. ]]></programlisting>
  521. <para>
  522. Si votre classe d'aide a une méthode <methodname>setView()</methodname>, elle sera appelée
  523. quand votre classe sera instanciée la première fois et fournira l'objet de la vue
  524. courante. Il est de votre responsabilité de maintenir la persistance de l'objet dans
  525. votre classe, de même que de déterminer la façon dont il peut être accéder.
  526. </para>
  527. </sect2>
  528. <sect2 id="zend.view.helpers.registering-concrete">
  529. <title>Registering Concrete Helpers</title>
  530. <para>
  531. Sometimes it is convenient to instantiate a view helper, and then register it with the
  532. view. As of version 1.10.0, this is now possible using the
  533. <methodname>registerHelper()</methodname> method, which expects two arguments: the
  534. helper object, and the name by which it will be registered.
  535. </para>
  536. <programlisting language="php"><![CDATA[
  537. $helper = new My_Helper_Foo();
  538. // ...do some configuration or dependency injection...
  539. $view->registerHelper($helper, 'foo');
  540. ]]></programlisting>
  541. <para>
  542. If the helper has a <methodname>setView()</methodname> method, the view object will call
  543. this and inject itself into the helper on registration.
  544. </para>
  545. <note>
  546. <title>Helper name should match a method</title>
  547. <para>
  548. The second argument to <methodname>registerHelper()</methodname> is the name of the
  549. helper. A corresponding method name should exist in the helper; otherwise,
  550. <classname>Zend_View</classname> will call a non-existent method when invoking the
  551. helper, raising a fatal PHP error.
  552. </para>
  553. </note>
  554. </sect2>
  555. </sect1>