Zend_View-Helpers.xml 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 21825 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.view.helpers" xmlns:xi="http://www.w3.org/2001/XInclude">
  5. <title>Klasy helperów</title>
  6. <para>
  7. W skryptach widoków często potrzebne jest przeprowadzanie złożonych
  8. funkcji: na przykład formatowanie daty, generowanie elementów
  9. formularzy, czy wyświetlanie odnośników akcji. Możesz użyć klas
  10. helperów w tym celu.
  11. </para>
  12. <para>
  13. Klasa helpera jest prostą klasą. Powiedzmy, że potrzebujemy klasę
  14. helpera o nazwie 'fooBar'. Domyślnie nazwa klasy jest poprzedzona
  15. przedrostkiem <code>'Zend_View_Helper_'</code> (możesz określić własny
  16. przedrostek podczas ustawiania ścieżki do klas helperów), a ostatni
  17. segment nazwy klasy jest nazwą klasy helpera; ten segment powinien
  18. być w postaci TitleCapped; pełna nazwa klasy wygląda więc tak:
  19. <code>Zend_View_Helper_FooBar</code>. Ta klasa powinna zawierać
  20. przynajmniej jedną metodę, nazwaną tak jak klasa helpera, ale już w
  21. postaci camelCased: <code>fooBar()</code>.
  22. </para>
  23. <note>
  24. <title>Zwróć uwagę na wielkość liter</title>
  25. <para>
  26. Nazwy klas helperów są zawsze w postaci camelCased, czyli nigdy
  27. nie zaczynają się wielką literą. Nazwa klasy jest w postaci
  28. MixedCased, ale wywoływana metoda zawsze ma postać camelCased.
  29. </para>
  30. </note>
  31. <note>
  32. <title>Domyślne ścieżki helperów</title>
  33. <para>
  34. Domyślna ścieżka helperów zawsze wskazuje na ścieżkę helperów
  35. widoków Zend Framework np., 'Zend/View/Helper/'. Nawet jeśli
  36. wywołasz metodę <code>setHelperPath()</code> aby nadpisać istniejące
  37. ścieżki, domyślna ścieżka zawsze będzie ustawiona aby być pewnym, że
  38. domyślne helpery będą zawsze działać.
  39. </para>
  40. </note>
  41. <para>
  42. Aby użyć helpera w swoim skrypcie widoku, wywołaj go za pomocą
  43. <code>$this->nazwaHelpera()</code>. Obiekt <code>Zend_View</code>
  44. załaduje klasę <code>Zend_View_Helper_NazwaHelpera</code>, utworzy
  45. obiekt tej klasy i wywoła metodę <code>nazwaHelpera()</code>.
  46. Instancja obiektu istnieje teraz w instancji <code>Zend_View</code> i
  47. będzie ona ponownie używana przy następnych wywołaniach
  48. <code>$this->nazwaHelpera()</code>.
  49. </para>
  50. <sect2 id="zend.view.helpers.initial">
  51. <title>Wbudowane klasy helperów</title>
  52. <para>
  53. <code>Zend_View</code> posiada wbudowany zbiór klas helperów, z
  54. których większość odnosi się do generowania formularzy, a każda z
  55. nich automatycznie filtruje dane wyjściowe. Dodatkowo dostępne są
  56. klasy helperów służące do tworzenia adresów URL na podstawie tras,
  57. do tworzenia list HTML oraz do deklarowania zmiennych. Obecnie
  58. dostępne klasy helperów to:
  59. </para>
  60. <itemizedlist>
  61. <listitem><para>
  62. <code>declareVars():</code> Głównie używana gdy używamy metody
  63. <code>strictVars()</code>, ta klasa helpera może być użyta
  64. do zadeklarowania zmiennych szablonu, które zostały ustawione
  65. lub nie, w obiekcie widoku. Możemy też użyć jej do ustawienia
  66. domyślnych wartości. Tablice przekazane do metody jako argumenty
  67. zostaną użyte do ustawienia domyślnych wartości; w przeciwnym
  68. razie, gdy zmienna nie istnieje, zostanie ustawiona jako pusty
  69. łańcuch znaków.
  70. </para></listitem>
  71. <listitem><para>
  72. <code>fieldset($name, $content, $attribs):</code> Tworzy element
  73. fieldset. Jeśli tablica <code>$attribs</code> zawiera
  74. klucz 'legend', ta wartość zostanie użyta jako legenda pola
  75. fieldset. Pole fieldset będzie zawierać zawartość przekazaną do
  76. tego helpera przez zmienną <code>$content</code>.
  77. </para></listitem>
  78. <listitem><para>
  79. <code>form($name, $attribs, $content):</code> Generuje formularz.
  80. Wszystkie atrybuty z tablicy <code>$attribs</code> będą
  81. zabezpieczone i renderowane jako atrybuty XHTML znacznika form.
  82. Jeśli przekazana jest zmienna <code>$content</code> i ma inną
  83. wartość niż false, to zawartość tej zmiennej zostanie
  84. renderowana wraz ze znacznikiem otwierającym i zamykającym
  85. formularz; jeśli zmienna <code>$content</code> ma wartość false
  86. (domyślnie), zostanie zrenderowany tylko znacznik otwierający.
  87. </para></listitem>
  88. <listitem><para>
  89. <code>formButton($name, $value, $attribs):</code> Tworzy element
  90. &lt;button /&gt;.
  91. </para></listitem>
  92. <listitem>
  93. <para>
  94. <code>formCheckbox($name, $value, $attribs,
  95. $options):</code> Tworzy element &lt;input type="checkbox"
  96. /&gt;.
  97. </para>
  98. <para>
  99. Domyślnie, jeśli zmienne $value oraz $options nie są
  100. przekazane, dla pola niezaznaczonego zostanie przyjęta
  101. wartość '0', a dla zaznaczonego wartość '1'.
  102. Jeśli zostanie przekazana zmienna $value, ale nie zostanie
  103. przekazana zmienna $options, dla pola zaznaczonego zostanie
  104. przyjęta wartość zmiennej $value.
  105. </para>
  106. <para>
  107. Zmienna $options powinna być tablicą. Jeśli tablica jest
  108. indeksowana, dla pola zaznaczonego zostanie przyjęta pierwsza
  109. wartość, a druga wartość dla pola niezaznaczonego; wszystkie
  110. inne wartości zostaną zignorowane. Możesz także przekazać
  111. tablicę asocjacyjną z kluczami 'checked' oraz 'unChecked'.
  112. </para>
  113. <para>
  114. Jeśli zmienna $options zostanie przekazana, a wartość
  115. $value jest równa wartości określonej dla pola zaznaczonego,
  116. to element zostanie zaznaczony. Możesz także określić czy
  117. element ma być zaznaczony przekazując logiczną wartość dla
  118. atrybutu 'checked'.
  119. </para>
  120. <para>
  121. Powyższe najlepiej podsumować za pomocą przykładów:
  122. </para>
  123. <programlisting role="php"><![CDATA[
  124. // '1' oraz '0' jako opcje dla pola zaznaczonego/niezaznaczonego;
  125. // pole jest niezaznaczone
  126. echo $this->formCheckbox('foo');
  127. // '1' oraz '0' jako opcje dla pola zaznaczonego/niezaznaczonego;
  128. // pole jest zaznaczone
  129. echo $this->formCheckbox('foo', null, array('checked' => true));
  130. // 'bar' oraz '0' jako opcje dla pola zaznaczonego/niezaznaczonego;
  131. // pole jest niezaznaczone
  132. echo $this->formCheckbox('foo', 'bar');
  133. // 'bar' oraz '0' jako opcje dla pola zaznaczonego/niezaznaczonego;
  134. // pole jest zaznaczone
  135. echo $this->formCheckbox('foo', 'bar', array('checked' => true));
  136. // 'bar' oraz 'baz' jako opcje dla pola zaznaczonego/niezaznaczonego;
  137. // pole jest niezaznaczone
  138. echo $this->formCheckbox('foo', null, null, array('bar', 'baz');
  139. // 'bar' oraz 'baz' jako opcje dla pola zaznaczonego/niezaznaczonego;
  140. // pole jest niezaznaczone
  141. echo $this->formCheckbox('foo', null, null, array(
  142. 'checked' => 'bar',
  143. 'unChecked' => 'baz'
  144. ));
  145. // 'bar' oraz 'baz' jako opcje dla pola zaznaczonego/niezaznaczonego;
  146. // pole jest zaznaczone
  147. echo $this->formCheckbox('foo', 'bar', null, array('bar', 'baz');
  148. echo $this->formCheckbox('foo',
  149. null,
  150. array('checked' => true),
  151. array('bar', 'baz');
  152. // 'bar' oraz 'baz' jako opcje dla pola zaznaczonego/niezaznaczonego;
  153. // pole jest niezaznaczone
  154. echo $this->formCheckbox('foo', 'baz', null, array('bar', 'baz');
  155. echo $this->formCheckbox('foo',
  156. null,
  157. array('checked' => false),
  158. array('bar', 'baz');
  159. ]]>
  160. </programlisting>
  161. <para>
  162. We wszystkich przypadkach zostanie dołączony ukryty element
  163. z wartością dla pola niezaznaczonego; w ten sposób uzyskamy
  164. pewność, że nawet jeśli pole nie będzie zaznaczone, to do
  165. formularza zostanie przekazana poprawna wartość.
  166. </para>
  167. </listitem>
  168. <listitem>
  169. <para>
  170. <code>formErrors($errors, $options):</code> Generuje listę
  171. nieuporządkowaną zawierająca informacje o błędach. Zmienna
  172. <code>$errors</code> powinna być łańcuchem znaków lub
  173. tablicą łańcuchów znaków; Zmienna <code>$options</code>
  174. powinna zawierać atrybuty jakie chcesz umieścić w znaczniku
  175. otwierającym listę.
  176. </para>
  177. <para>
  178. Możesz określić alternatywny sposób otwarcia, zamknięcia i
  179. oddzielania informacji o błędach wywołując metody helpera:
  180. </para>
  181. <itemizedlist>
  182. <listitem><para>
  183. <code>setElementStart($string)</code>; domyślną
  184. wartością jest '&lt;ul class="errors"%s"&gt;&lt;li&gt;', gdzie %s
  185. jest zastąpione atrybutami zdefiniowanymi w zmiennej
  186. <code>$options</code>.
  187. </para></listitem>
  188. <listitem><para>
  189. <code>setElementSeparator($string)</code>; domyślną
  190. wartością jest '&lt;/li&gt;&lt;li&gt;'.
  191. </para></listitem>
  192. <listitem><para>
  193. <code>setElementEnd($string)</code>; domyślną
  194. wartością jest '&lt;/li&gt;&lt;/ul&gt;'.
  195. </para></listitem>
  196. </itemizedlist>
  197. </listitem>
  198. <listitem><para>
  199. <code>formFile($name, $value, $attribs):</code> Tworzy element
  200. &lt;input type="file" /&gt;.
  201. </para></listitem>
  202. <listitem><para>
  203. <code>formHidden($name, $value, $attribs):</code> Tworzy element
  204. &lt;input type="hidden" /&gt;.
  205. </para></listitem>
  206. <listitem><para>
  207. <code>formLabel($name, $value, $attribs):</code> Tworzy element
  208. &lt;label&gt;, nadając atrybutowi <code>for</code> wartość
  209. zmiennej <code>$name</code> i ustawiając jako etykietę wartość
  210. zmiennej <code>$value</code>.
  211. Jeśli opcja <code>disable</code> zostanie przekazana w zmiennej
  212. <code>$attribs</code>, żaden kod nie zostanie zwrócony.
  213. </para></listitem>
  214. <listitem><para>
  215. <code>formMultiCheckbox($name, $value, $attribs, $options,
  216. $listsep):</code> Tworzy listę elementów checkbox. Zmienna
  217. <code>$options</code> powinna być asocjacyjną tablicą, i może
  218. mieć dowolne rozmiary. Zmienna <code>$value</code> może być
  219. pojedynczą wartością lub tablicą wartości, które odpowiadają
  220. kluczom tablicy <code>$options</code>. Zmienna
  221. <code>$listsep</code> jest separatorem elementów, domyślnie ma
  222. wartość &lt;br /&gt;. Domyślnie ten element jest traktowany jako
  223. tablica; wszystkie pola mają te samą nazwę i będą wysłane jako
  224. tablica.
  225. </para></listitem>
  226. <listitem><para>
  227. <code>formPassword($name, $value, $attribs):</code> Tworzy
  228. element &lt;input type="password" /&gt;.
  229. </para></listitem>
  230. <listitem><para>
  231. <code>formRadio($name, $value, $attribs, $options):</code>
  232. Tworzy serię elementów &lt;input type="radio" /&gt;, po jednym
  233. dla każdego elementu tablicy $options. W tablicy $options, klucz
  234. jest wartością przycisku radio, a wartość elementu tablicy
  235. jest etykietą przycisku radio. Zmienna $value określa wartość
  236. przycisku, który ma być początkowo zaznaczony.
  237. </para></listitem>
  238. <listitem><para>
  239. <code>formReset($name, $value, $attribs):</code> Tworzy element
  240. &lt;input type="reset" /&gt;.
  241. </para></listitem>
  242. <listitem><para>
  243. <code>formSelect($name, $value, $attribs, $options):</code>
  244. Tworzy blok &lt;select&gt;...&lt;/select&gt;, z elementami
  245. &lt;option&gt; po jednym dla każdego elementu tablicy $options.
  246. W tablicy $options klucz jest wartością elementu, a wartość
  247. jest etykietą. Zmienna $value określa wartość elementu (lub
  248. elementów), który ma być początkowo zaznaczony.
  249. </para></listitem>
  250. <listitem><para>
  251. <code>formSubmit($name, $value, $attribs):</code> Tworzy element
  252. &lt;input type="submit" /&gt;.
  253. </para></listitem>
  254. <listitem><para>
  255. <code>formText($name, $value, $attribs):</code> Tworzy element
  256. &lt;input type="text" /&gt;.
  257. </para></listitem>
  258. <listitem><para>
  259. <code>formTextarea($name, $value, $attribs):</code> Tworzy
  260. element &lt;textarea&gt;...&lt;/textarea&gt;.
  261. </para></listitem>
  262. <listitem><para>
  263. <code>url($urlOptions, $name, $reset):</code> Tworzy adres URL
  264. na podstawie nazwy trasy. Parametr <code>$urlOptions</code>
  265. powinien być tablicą asocjacyjną zawierającą pary klucz/wartość
  266. używane przez daną trasę.
  267. </para></listitem>
  268. <listitem><para>
  269. <code>htmlList($items, $ordered, $attribs, $escape):</code> generuje
  270. uporządkowane oraz nieuporządkowane listy na podstawie
  271. przekazanego do niej parametru <code>$items</code>.
  272. Jeśli parametr <code>$items</code> jest wielowymiarową tablicą,
  273. zostanie zbudowana lista zagnieżdżona. Jeśli flaga <code>$escape</code>
  274. ma wartość true (domyślnie), każdy z elementów zostanie
  275. zabezpieczony za pomocą mechanizmu zarejestrowanego w obiekcie
  276. widoku; przekaż wartość false aby zezwolić na wyświetlanie kodu
  277. html wewnątrz elementów list.
  278. </para></listitem>
  279. </itemizedlist>
  280. <para>
  281. Użycie tych metod w Twoim skrypcie jest bardzo łatwe, poniżej
  282. znajduje się przykład. Zauważ, że wszystko czego potrzebujesz
  283. to wywołanie tych metod; załadowanie ich i utworzenie instancji
  284. odbędzie się automatycznie.
  285. </para>
  286. <programlisting role="php"><![CDATA[
  287. // wewnątrz skryptu widoku, $this odnosi się do instancji Zend_View.
  288. //
  289. // załóżmy, że już przypisałeś serię elementów opcji jako tablicę
  290. // o nazwie $countries = array('us' => 'United States', 'il' =>
  291. // 'Israel', 'de' => 'Germany').
  292. ?>
  293. <form action="action.php" method="post">
  294. <p><label>Adres Email:
  295. <?php echo $this->formText('email', 'you@example.com', array('size' => 32)) ?>
  296. </label></p>
  297. <p><label>Kraj:
  298. <?php echo $this->formSelect('country', 'us', null, $this->countries) ?>
  299. </label></p>
  300. <p><label>Czy zgadzasz się?
  301. <?php echo $this->formCheckbox('opt_in', 'yes', null, array('yes', 'no')) ?>
  302. </label></p>
  303. </form>
  304. ]]>
  305. </programlisting>
  306. <para>
  307. Rezultat wyglądałby w ten sposób:
  308. </para>
  309. <programlisting role="php"><![CDATA[
  310. <form action="action.php" method="post">
  311. <p><label>Adres Email:
  312. <input type="text" name="email" value="you@example.com" size="32" />
  313. </label></p>
  314. <p><label>Kraj:
  315. <select name="country">
  316. <option value="us" selected="selected">United States</option>
  317. <option value="il">Israel</option>
  318. <option value="de">Germany</option>
  319. </select>
  320. </label></p>
  321. <p><label>Czy zgadzasz się?
  322. <input type="hidden" name="opt_in" value="no" />
  323. <input type="checkbox" name="opt_in" value="yes" checked="checked" />
  324. </label></p>
  325. </form>
  326. ]]>
  327. </programlisting>
  328. <xi:include href="Zend_View-Helpers-Action.xml">
  329. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Action.xml" /></xi:fallback>
  330. </xi:include>
  331. <xi:include href="Zend_View-Helpers-Partial.xml">
  332. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Partial.xml" /></xi:fallback>
  333. </xi:include>
  334. <xi:include href="Zend_View-Helpers-Placeholder.xml">
  335. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Placeholder.xml" /></xi:fallback>
  336. </xi:include>
  337. <xi:include href="Zend_View-Helpers-Doctype.xml">
  338. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Doctype.xml" /></xi:fallback>
  339. </xi:include>
  340. <xi:include href="Zend_View-Helpers-HeadLink.xml">
  341. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadLink.xml" /></xi:fallback>
  342. </xi:include>
  343. <xi:include href="Zend_View-Helpers-HeadMeta.xml">
  344. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadMeta.xml" /></xi:fallback>
  345. </xi:include>
  346. <xi:include href="Zend_View-Helpers-HeadScript.xml">
  347. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadScript.xml" /></xi:fallback>
  348. </xi:include>
  349. <xi:include href="Zend_View-Helpers-HeadStyle.xml">
  350. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadStyle.xml" /></xi:fallback>
  351. </xi:include>
  352. <xi:include href="Zend_View-Helpers-HeadTitle.xml">
  353. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadTitle.xml" /></xi:fallback>
  354. </xi:include>
  355. <xi:include href="Zend_View-Helpers-HtmlObject.xml">
  356. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HtmlObject.xml" /></xi:fallback>
  357. </xi:include>
  358. <xi:include href="Zend_View-Helpers-InlineScript.xml">
  359. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-InlineScript.xml" /></xi:fallback>
  360. </xi:include>
  361. <xi:include href="Zend_View-Helpers-Json.xml">
  362. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Json.xml" /></xi:fallback>
  363. </xi:include>
  364. <xi:include href="Zend_View-Helpers-Translate.xml">
  365. <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Translate.xml" /></xi:fallback>
  366. </xi:include>
  367. </sect2>
  368. <sect2 id="zend.view.helpers.paths">
  369. <title>Ścieżki klas helperów</title>
  370. <para>
  371. Tak jak ze skryptami widoków, kontroler może określić stos ścieżek,
  372. w których <code>Zend_View</code> ma szukać klas helperów.
  373. Domyślnie <code>Zend_View</code> szuka klas helperów w katalogu
  374. "Zend/View/Helper/*". Możesz wybrać inny katalog używając metod
  375. <code>setHelperPath()</code> oraz <code>addHelperPath()</code>.
  376. Dodatkowo możesz określić przedrostek klas helperów znajdujących
  377. się w podanej ścieżce aby utworzyć przestrzenie nazw dla klas
  378. helperów. Domyślnie, gdy żaden przedrostek nie zostanie określony,
  379. przyjęty zostanie przedrostek 'Zend_View_Helper_'.
  380. </para>
  381. <programlisting role="php"><![CDATA[
  382. $view = new Zend_View();
  383. // Ustaw ścieżkę na /path/to/more/helpers, z przedrostkiem 'My_View_Helper'
  384. $view->setHelperPath('/path/to/more/helpers', 'My_View_Helper');
  385. ]]>
  386. </programlisting>
  387. <para>
  388. Oczywiście możesz dodawać ścieżki na stos używając metody
  389. <code>addHelperPath()</code>. Gdy dodajesz ścieżki na stos,
  390. <code>Zend_View</code> będzie szukać klasy helpera począwszy od
  391. ostatnio dodanej ścieżki. To pozwala na dodanie (lub nawet
  392. nadpisanie) podstawowego pakietu klas helperów swoimi własnymi
  393. klasami.
  394. </para>
  395. <programlisting role="php"><![CDATA[
  396. $view = new Zend_View();
  397. // Dodaj ścieżkę /path/to/some/helpers z przedrostkiem
  398. // klasy 'My_View_Helper'
  399. $view->addHelperPath('/path/to/some/helpers', 'My_View_Helper');
  400. // Dodaj ścieżkę /other/path/to/helpers z przedrostkiem
  401. // klasy 'Your_View_Helper'
  402. $view->addHelperPath('/other/path/to/helpers', 'Your_View_Helper');
  403. // teraz kiedy wywołasz $this->helperName(), Zend_View będzie
  404. // wpierw szukał w "/path/to/some/helpers/HelperName" używając
  405. // nazwy klasy "Your_View_Helper_HelperName",
  406. // następnie w "/other/path/to/helpers/HelperName.php" używając
  407. // nazwy klasy "My_View_Helper_HelperName"
  408. // i ostatecznie w "Zend/View/Helper/HelperName.php" używając
  409. // nazwy klasy "Zend_View_Helper_HelperName".
  410. ]]>
  411. </programlisting>
  412. </sect2>
  413. <sect2 id="zend.view.helpers.custom">
  414. <title>Pisanie własnych klas helperów</title>
  415. <para>
  416. Pisanie własnych klas helperów jest łatwe; po prostu pisz według
  417. poniższych zasad:
  418. </para>
  419. <itemizedlist>
  420. <listitem><para>
  421. Minimalna nazwa klasy musi kończyć się nazwą helpera przy
  422. użyciu MixedCaps. Przykładowo, jeśli piszesz klasę helpera
  423. zwaną "twojHelper", minimalną nazwą klasy musi być
  424. "TwojHelper". Możesz, a nawet powinieneś nadać nazwie klasy
  425. przedrostek i jest zalecane, abyś użył 'View_Helper' jako
  426. części przedrostka: "My_View_Helper_TwojHelper". (Przedrostek
  427. będziesz musiał przekazać wraz z końcowym znakiem podkreślenia
  428. lub bez niego, do metod <code>addHelperPath()</code> oraz
  429. <code>setHelperPath()</code>).
  430. </para></listitem>
  431. <listitem><para>
  432. Nazwa klasy musi przynajmniej składać się z nazwy helpera,
  433. używając formy MixedCaps. Np. jeśli tworzysz helper nazwany
  434. "twojHelper", nazwą klasy musi być przynajmniej "TwojHelper".
  435. Możesz, a nawet powinieneś dać nazwie klasy przedrostek i jest
  436. zalecane aby znalazła się w nim część 'View_Helper' aby cała
  437. nazwa klasy wyglądała mniej więcej tak: "My_View_Helper_TwojHelper".
  438. (Będziesz musiał przekazać ten przedrostek, ze końcowym znakiem
  439. podkreślenia lub bez, do jednej z metod <code>addHelperPath()</code>
  440. lub <code>setHelperPath()</code>).
  441. </para></listitem>
  442. <listitem><para>
  443. Klasa musi posiadać publiczną metodę która jest taka jak nazwa
  444. helpera; jest to metoda która zostanie wywołana gdy skrypt
  445. widoku wywoła "$this->twojHelper()". W przykładzie helpera
  446. "twojHelper", wymaganą deklaracją metody powinno być
  447. "public function twojHelper()".
  448. </para></listitem>
  449. <listitem><para>
  450. Klasa nie powinna wyświetlać ani w inny sposób generować danych
  451. wyjściowych. Zamiast tego powinna zwrócić dane do wyświetlenia.
  452. Zwracane wartości powinny być odpowiednio przefiltrowane.
  453. </para></listitem>
  454. <listitem><para>
  455. Klasa musi znajdować się w pliku odpowiednio do nazwy metody
  456. helpera. Przykładowo dla helpera o nazwie "twojHelper",
  457. plik powinien nazywać się "TwojHelper.php".
  458. </para></listitem>
  459. </itemizedlist>
  460. <para>
  461. Umieść plik klasy helpera w katalogu który był dodany do stosu
  462. ścieżek, a <code>Zend_View</code> automatycznie załaduje klasę,
  463. utworzy instancję, i uruchomi metodę.
  464. </para>
  465. <para>
  466. Poniżej przykład kodu naszego przykładowego helpera
  467. <code>twojHelper</code>:
  468. </para>
  469. <programlisting role="php"><![CDATA[
  470. class My_View_Helper_TwojHelper extends Zend_View_Helper_Abstract
  471. {
  472. protected $_count = 0;
  473. public function twojHelper()
  474. {
  475. $this->_count++;
  476. $output = "I have seen 'The Jerk' {$this->_count} time(s).";
  477. return htmlspecialchars($output);
  478. }
  479. }
  480. ]]>
  481. </programlisting>
  482. <para>
  483. Teraz w skrypcie widoku możesz wywołać helpera
  484. <code>TwojHelper</code> tyle razy ile zechcesz; instancja zostanie
  485. utworzona raz i będzie ona istniała przez cały okres istnienia
  486. instancji <code>Zend_View</code>.
  487. </para>
  488. <programlisting role="php"><![CDATA[
  489. // pamiętaj, że w skrypcie widoku $this odnosi się do instancji Zend_View.
  490. echo $this->twojHelper();
  491. echo $this->twojHelper();
  492. echo $this->twojHelper();
  493. ]]>
  494. </programlisting>
  495. <para>
  496. Dane wyjściowe wyglądałyby w ten sposób:
  497. </para>
  498. <programlisting role="php"><![CDATA[
  499. I have seen 'The Jerk' 1 time(s).
  500. I have seen 'The Jerk' 2 time(s).
  501. I have seen 'The Jerk' 3 time(s).
  502. ]]>
  503. </programlisting>
  504. <para>
  505. Czasem możesz potrzebować uzyskać dostęp do obiektu
  506. <code>Zend_View</code> -- na przykład, jeśli potrzebujesz użyć
  507. zarejestrowanego kodowania, lub chcesz renderować inny skrypt
  508. widoku jako część klasy helpera. Aby uzyskać dostęp do obiektu
  509. widoku, klasa helpera powinna posiadać metodę
  510. <code>setView($view)</code>, tak jak poniżej:
  511. </para>
  512. <programlisting role="php"><![CDATA[
  513. class My_View_Helper_ScriptPath
  514. {
  515. public $view;
  516. public function setView(Zend_View_Interface $view)
  517. {
  518. $this->view = $view;
  519. }
  520. public function scriptPath($script)
  521. {
  522. return $this->view->getScriptPath($script);
  523. }
  524. }
  525. ]]>
  526. </programlisting>
  527. <para>
  528. Jeśli twoja klasa helpera posiada metodę <code>setView()</code>,
  529. będzie ona wywołana wtedy, gdy po raz pierwszy zostanie utworzona
  530. instancja klasy helpera i przekazany zostanie obecny obiekt
  531. widoku. Jest to po to, aby przechować obiekt widoku w klasie helpera,
  532. a także po to, aby określić w jaki sposób powinno się uzyskiwać do
  533. tego obiektu dostęp.
  534. </para>
  535. <para>
  536. Jeśli rozszerzasz klasę <code>Zend_View_Helper_Abstract</code>
  537. nie musisz definiować tej metody, ponieważ jest ona zdefiniowana
  538. przez klasę rozszerzaną.
  539. </para>
  540. </sect2>
  541. </sect1>