| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <sect1 id="zend.view.helpers" xmlns:xi="http://www.w3.org/2001/XInclude">
- <title>Помощники видов</title>
- <para>
- Часто бывает так, что в скриптах вида необходимо повторно выполнять
- определенный набор функций; например, формирование даты,
- генерация элементов формы, отображение ссылок. Вы можете использовать
- помощников для выполнения этих действий.
- </para>
- <para>
- Помощник представляет собой просто класс. Скажем, нам нужен помощник
- 'fooBar'. По умолчанию имя класса помощника начинается с
- <code>'Zend_View_Helper_'</code> (вы можете указать другой префикс при
- установке путей к помощникам видов), последней частью имени класа
- является имя помощника. Все слова этой части должны писаться слитно,
- первые буквы слов - в верхнем регистре (TitleCapped); таким образом мы
- получаем имя класа <classname>Zend_View_Helper_FooBar</classname>. Класс должен
- содержать как минимум один метод, названный по имени помощника в формате
- camelCase: <code>fooBar()</code>.
- </para>
- <note>
- <title>Следите за регистром</title>
- <para>
- Имена помощников всегда должны быть в стиле camelCased, т.е. они
- никогда не начинаются с символа в верхнем регистре. Имя класса
- имеет стиль MixedCase (т.е. начинается с символа в верхнем регистре),
- но реально выполняемый метод должен быть в стиле camelCase.
- </para>
- </note>
- <note>
- <title>Используемый по умолчанию путь к помощникам</title>
- <para>
- Используемый по умолчанию путь к помощникам всегда указывает на
- помощники Zend Framework-а, т.е. 'Zend/View/Helper/'. Даже если вы
- вызываете <code>setHelperPath()</code> для перезаписи существующих
- путей, этот путь всегда будет использоваться для обеспечения работы
- помощников, входящих в поставку Zend Framework-а
- </para>
- </note>
- <para>
- Для того, чтобы использовать помощника в своем скрипте вида, вызывайте
- его, используя <varname>$this->имяПомощника()</varname>.
- В этом случае <classname>Zend_View</classname> загрузит класс
- <code>Zend_View_Helper_ИмяПомощника</code>, создаст его экземпляр и
- вызовет его метод <code>имяПомощника()</code>. Экземпляр объекта
- сохраняется в экземпляре <classname>Zend_View</classname> и будет повторно
- использоваться им во всех будущих вызовах
- <varname>$this->имяПомощника()</varname>.
- </para>
- <sect2 id="zend.view.helpers.initial">
- <title>Начальный набор помощников</title>
- <para>
- <classname>Zend_View</classname> поставляется с начальным набором помощников,
- большинство из которых связано с генерацией элементов форм и
- автоматически экранирует весь вывод. Кроме этого, есть помощники для
- создания HTML-списков, URL-ов на основе маршрутов, и объявления
- переменных. В настоящее время в поставляемый набор входят:
- </para>
- <itemizedlist>
- <listitem><para>
- <code>declareVars():</code> В основном предназначен для
- использования вместе с <code>strictVars()</code>. Этот
- помощник может использоваться для объявления переменных
- шаблонов, которые не обязательно присутствуют в объекте
- вида, и для установки значений по умолчанию.
- Массивы, переданные методу в качестве аргуметов, будут
- использованы для установки значений по умолчанию; иначе, если
- переменная не существует, то ее значением будет пустая строка.
- </para></listitem>
- <listitem><para>
- <code>fieldset($name, $content, $attribs):</code> Создает
- XHTML-элемент <code>fieldset</code> (набор полей). Если массив
- <varname>$attribs</varname> содержит в ключ 'legend', то это значение
- используется для элемента <code>legend</code>. Элемент
- <code>fieldset</code> будет содержать в себе значение
- параметра <varname>$content</varname>, переданного помощнику.
- </para></listitem>
- <listitem><para>
- <code>form($name, $attribs, $content):</code> Генерирует
- XHTML-элемент <code>form</code> (форма). Все элементы массива
- <varname>$attribs</varname> и добавляются как аттрибуты тега
- <code>form</code>. Если параметр <varname>$content</varname> передан и
- не имеет значение false, то это содержимое добавляется между
- открывающим и закрывающим тегами формы. Если же
- <varname>$content</varname> имеет булево значение false (значение по
- умолчанию), то будет сгенерирован только открывающий тег формы.
- </para></listitem>
- <listitem><para>
- <code>formButton($name, $value, $attribs)</code>: Создает элемент
- <code><button /></code>.
- </para></listitem>
-
- <listitem>
- <para>
- <code>formCheckbox($name, $value, $attribs, $options)</code>:
- Создает элемент <code><input type="checkbox" /></code>
- (флажок опций).
- </para>
- <para>
- По умолчанию, если не был передан параметры <varname>$value</varname>
- и <varname>$options</varname>, то значение '1' соотвествует
- выбранному состоянию, '0' - не выбранному. Если был передан
- параметр <varname>$value</varname>, но
- не передан <varname>$options</varname>, то значение
- <varname>$value</varname> соотвествует выбранному состоянию.
- </para>
- <para>
- <varname>$options</varname> должен быть массивом. Если это
- индексный массив, то первое значение соответствует
- выбранному состоянию, второе - не выбранному состоянию,
- все остальные значения игнорируются. Вы можете также
- передавать массив с ключами 'checked' и 'unChecked'.
- </para>
- <para>
- Если параметр $options был передан, и <varname>$value</varname>
- соответствует значению в выбранном состоянии, то элемент
- будет помечен как выбранный. Вы можете также помечать
- элемент как выбранный или не выбранный путем передачи
- значения булевого типа для атрибута 'checked'.
- </para>
- <para>
- Наверное, лучше всего проиллюстрировать это примерами:
- </para>
- <programlisting language="php"><![CDATA[
- // '1' и '0' в качестве значений для выбранного/ не выбранного состояний
- // флажок не выбран
- echo $this->formCheckbox('foo');
- // '1' и '0' в качестве значений для выбранного/ не выбранного состояний
- // флажок выбран
- echo $this->formCheckbox('foo', null, array('checked' => true));
- // 'bar' и '0' в качестве значений для выбранного/ не выбранного состояний
- // флажок не выбран
- echo $this->formCheckbox('foo', 'bar');
- // 'bar' и '0' в качестве значений для выбранного/ не выбранного состояний
- // флажок выбран
- echo $this->formCheckbox('foo', 'bar', array('checked' => true));
- // 'bar' и 'baz' в качестве значений для выбранного/ не выбранного состояний
- // флажок не выбран
- echo $this->formCheckbox('foo', null, null, array('bar', 'baz');
- // 'bar' и 'baz' в качестве значений для выбранного/ не выбранного состояний
- // флажок не выбран
- echo $this->formCheckbox('foo', null, null, array(
- 'checked' => 'bar',
- 'unChecked' => 'baz'
- ));
- // 'bar' и 'baz' в качестве значений для выбранного/ не выбранного состояний
- // флажок выбран
- echo $this->formCheckbox('foo', 'bar', null, array('bar', 'baz');
- echo $this->formCheckbox('foo',
- null,
- array('checked' => true),
- array('bar', 'baz');
- // 'bar' и 'baz' в качестве значений для выбранного/ не выбранного состояний
- // флажок не выбран
- echo $this->formCheckbox('foo', 'baz', null, array('bar', 'baz');
- echo $this->formCheckbox('foo',
- null,
- array('checked' => false),
- array('bar', 'baz');
- ]]></programlisting>
- <para>
- Во всех случаях разметка предваряется скрытым элементом
- <code><input type="hidden" /></code>
- со значением для не выбранного состояния. Таким образом,
- и в том случае, если флажок опций не был выбран, вы будете
- получать корректное значение, возвращаемое вашей форме.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>formErrors($errors, $options):</code> Генерирует
- ненумерованный список XHTML для вывода сообщений об ошибках.
- <varname>$errors</varname> должен быть строкой или массивом строк.
- <varname>$options</varname> должен заключать в себе все аттрибуты,
- которые вы хотите поместить в открывающий тег списка.
- </para>
- <para>
- Вы можете указать альтернативный открывающий, закрывающий и
- разделяющий код путем вызова нескольких методов данного
- помощника:
- </para>
- <itemizedlist>
- <listitem><para>
- <code>setElementStart($string)</code>; по умолчанию
- используется
- '<ul class="errors"%s"><li>', где %s
- заменяется аттрибутами, указанными в
- <varname>$options</varname>.
- </para></listitem>
- <listitem><para>
- <code>setElementSeparator($string)</code>; по
- умолчанию используется '</li><li>'.
- </para></listitem>
- <listitem><para>
- <code>setElementEnd($string)</code>; по умолчанию
- используется '</li></ul>'.
- </para></listitem>
- </itemizedlist>
- </listitem>
- <listitem><para>
- <code>formFile($name, $attribs)</code>: Создает
- элемент <code><input type="file" /></code>.
- </para></listitem>
- <listitem><para>
- <code>formHidden($name, $value, $attribs)</code>: Создает
- элемент <code><input type="hidden" /></code>.
- </para></listitem>
- <listitem><para>
- <code>formLabel($name, $value, $attribs):</code> Создает элемент
- <label>, устанавливая значение аттрибута <code>for</code>
- равным значению <varname>$name</varname>, и содержимое элемента равным
- значению <varname>$value</varname>. Если в <varname>$attribs</varname> был
- передан <code>disable</code>, то ничего не будет возвращено.
- </para></listitem>
- <listitem><para>
- <code>formMultiCheckbox($name, $value, $attribs, $options,
- $listsep):</code>
- Создает список флажков опций. <varname>$options</varname> должен
- быть ассоциативным массивом, который может быть произвольной
- глубины. <varname>$value</varname> может быть скалярным значением или
- массивом выбранных значений, которые соответствуют ключам в
- массиве <varname>$options</varname>. <varname>$listsep</varname> по
- умолчанию является переносом строки в HTML ("<br />"). По
- умолчанию этот элемент интерпретируется как массив - все флажки
- опций имеют одно и то же имя и передаются как массив.
- </para></listitem>
- <listitem><para>
- <code>formPassword($name, $value, $attribs)</code>: Создает
- элемент <code><input type="password" /></code>.
- </para></listitem>
- <listitem><para>
- <code>formRadio($name, $value, $attribs, $options)</code>: Создает
- последовательность элементов <code><input type="radio" /></code>
- (переключатель опций). В массиве <varname>$options</varname> ключ
- является значением переключателя, значение является содержимым
- элемента <code>label</code> к переключателю. Переключатель опций
- со значением <varname>$value</varname> будет предварительно выбранным.
- </para></listitem>
- <listitem><para>
- <code>formReset($name, $value, $attribs)</code>: Создает
- элемент <code><input type="reset" /></code>.
- </para></listitem>
- <listitem><para>
- <code>formSelect($name, $value, $attribs, $options)</code>:
- Создает блок <code><select>...</select></code>,
- с опциями <code><option></code>, соотвествующими
- элементам массива <varname>$options</varname>. В массиве
- <varname>$options</varname> ключ является значением опции,
- значение - текстом опции. Опция со значением
- <varname>$value</varname> будет предварительно выбранной.
- </para></listitem>
- <listitem><para>
- <code>formSubmit($name, $value, $attribs)</code>: Создает
- элемент <code><input type="submit" /></code>.
- </para></listitem>
- <listitem><para>
- <code>formText($name, $value, $attribs)</code>: Создает
- элемент <code><input type="text" /></code>.
- </para></listitem>
- <listitem><para>
- <code>formTextarea($name, $value, $attribs)</code>: Создает
- блок <code><textarea>...</textarea></code>.
- </para></listitem>
- <listitem><para>
- <code>url($urlOptions, $name, $reset):</code> Создает строку
- URL, основываясь на машруте с именем <varname>$name</varname>.
- <varname>$urlOptions</varname> должен быть ассоциативным массивом пар
- ключ-значение для использования в данном маршруте.
- </para></listitem>
- <listitem><para>
- <code>htmlList($items, $ordered, $attribs, $escape):</code>
- Генерирует маркированный или нумерованный список на основе
- <varname>$items</varname>. Если <varname>$items</varname> является
- многомерным массивом, то будут построены вложенные списки. Если
- <varname>$escape</varname> установлен в true (значение по умолчанию),
- то все пункты будут экранированы с использованием механизма,
- зарегистрированного в объекте вида. Передавайте значение false,
- если хотите использовать разметку в своих списках. Если
- <varname>$ordered</varname> установлен в false (значение по
- умолчанию), то генерируется маркированный список, иначе -
- нумерованный.
- </para></listitem>
- </itemizedlist>
- <para>
- Использовать их в скрипте вида очень просто, вот пример.
- Обратите внимание, все, что вам нужно - это вызывать их,
- помощники будут загружаться и инстанцироваться автоматически, по
- мере необходимости.
- </para>
- <programlisting language="php"><![CDATA[
- // в скрипте вида $this ссылается на экземпляр Zend_View
- //
- // предположим, вы уже имеете последовательность опций $countries
- // в виде массива ('us' => 'United States', 'il' =>
- // 'Israel', 'de' => 'Germany')
- ?>
- <form action="action.php" method="post">
- <p><label>Your Email:
- <?php echo $this->formText('email', 'you@example.com', array('size' => 32)) ?>
- </label></p>
- <p><label>Your Country:
- <?php echo $this->formSelect('country', 'us', null, $this->countries) ?>
- </label></p>
- <p><label>Would you like to opt in?
- <?php echo $this->formCheckbox('opt_in', 'yes', null, array('yes', 'no')) ?>
- </label></p>
- </form>
- ]]></programlisting>
- <para>
- Результирующие выходные данные этого скрипта вида будут выглядеть
- примерно следующим образом:
- </para>
- <programlisting language="php"><![CDATA[
- <form action="action.php" method="post">
- <p><label>Your Email:
- <input type="text" name="email" value="you@example.com" size="32" />
- </label></p>
- <p><label>Your Country:
- <select name="country">
- <option value="us" selected="selected">United States</option>
- <option value="il">Israel</option>
- <option value="de">Germany</option>
- </select>
- </label></p>
- <p><label>Would you like to opt in?
- <input type="hidden" name="opt_in" value="no" />
- <input type="checkbox" name="opt_in" value="yes" checked="checked" />
- </label></p>
- </form>
- ]]></programlisting>
- <xi:include href="Zend_View-Helpers-Action.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Action.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-Cycle.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Cycle.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-Partial.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Partial.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-Placeholder.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Placeholder.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-Doctype.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Doctype.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-HeadLink.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadLink.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-HeadMeta.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadMeta.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-HeadScript.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadScript.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-HeadStyle.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadStyle.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-HeadTitle.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadTitle.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-HtmlObject.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HtmlObject.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-InlineScript.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-InlineScript.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-Json.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Json.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-Navigation.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Navigation.xml" /></xi:fallback>
- </xi:include>
- <xi:include href="Zend_View-Helpers-Translate.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Translate.xml" /></xi:fallback>
- </xi:include>
- </sect2>
- <sect2 id="zend.view.helpers.paths">
- <title>Пути к классам помощников</title>
- <para>
- Как и для скриптов вида, ваш контроллер может задать
- стек путей, в которых <classname>Zend_View</classname> должен искать
- классы помощников. По умолчанию <classname>Zend_View</classname>
- ищет классы помощников в <code>Zend/View/Helper/*</code>. Используя
- методы <code>setHelperPath()</code> и <code>addHelperPath()</code>,
- вы можете укзать <classname>Zend_View</classname>, чтобы он искал классы
- помощников в других местах. Кроме этого, вы можете указать префикс
- класса, используемый для помощников, находящихся в данном пути;
- префикс обеспечивает пространство имен. Если префикс не указан, то
- по умолчанию используется 'Zend_View_Helper_'.
- </para>
- <programlisting language="php"><![CDATA[
- $view = new Zend_View();
- // Устанавливает путь /path/to/more/helpers с префиксом 'My_View_Helper'
- $view->setHelperPath('/path/to/more/helpers', 'My_View_Helper');
- ]]></programlisting>
- <para>
- Вы можете "складывать" в стек пути, используя метод
- <code>addHelperPath()</code>. Если вы добавили
- пути в стек, то <classname>Zend_View</classname> будет искать запрошенный
- класс помощника в этих путях, начиная с пути, добавленного
- последним. Это дает возможность добавлять своих
- помощников к начальному набору (или даже замещать имеющиеся).
- </para>
- <programlisting language="php"><![CDATA[
- $view = new Zend_View();
- // Добавить /path/to/some/helpers с префиксом для классов 'My_View_Helper'
- $view->addHelperPath('/path/to/some/helpers', 'My_View_Helper);
- // Добавить /other/path/to/helpers с префиксом для классов 'Your_View_Helper'
- $view->addHelperPath('/other/path/to/helpers', 'Your_View_Helper');
- // теперь, когда вы вызываете $this->helperName(), Zend_View будет искать
- // "/path/to/some/helpers/HelperName" с классом
- // "Your_View_Helper_HelperName", затем "/other/path/to/helpers/HelperName.php"
- // с классом "My_View_Helper_HelperName", и под конец
- // "Zend/View/Helper/HelperName.php" с классом "Zend_View_Helper_HelperName".
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.view.helpers.custom">
- <title>Написание собственных помощников</title>
- <para>
- Написать собственного помощника довольно легко, просто следуйте
- этим правилам:
- </para>
- <itemizedlist>
- <listitem><para>
- Хотя это и не является совершенно необходимым, мы рекомендуем
- при создании своего помощника реализовывать интерфейс
- <classname>Zend_View_Helper_Interface</classname>
- или наследовать от класса <classname>Zend_View_Helper_Abstract</classname>.
- Добавленные в версии 1.6.0, они определяют только метод
- <code>setView()</code>, но в будущих релизах
- мы планируем реализовать паттерн "стратегия", который
- значительно упростит следование правилам по именованию,
- изложенным ниже. Следование этой рекомендации сейчас
- поможет в будущем избежать изменений в вашем коде.
- </para></listitem>
- <listitem><para>
- Имя класса должно, как минимум, заканчиваться именем
- помощника в стиле MixedCaps (СмешанныйРегистр). Т.е. если вы
- пишете помощника с именем "specialPurpose", то наиболее короткое
- имя класса должно быть "SpecialPurpose". Вы можете
- (и должны) давать классам имена с префиксом, рекомендуется
- использовать 'View_Helper' как часть этого префикса:
- "My_View_Helper_SpecialPurpose". Вам нужно будет передать этот
- префикс с или без завершающего знака подчеркивания методу
- <code>addHelperPath()</code> или <code>setHelperPath()</code>.
- </para></listitem>
- <listitem><para>
- Класс должен иметь открытый метод, имя которого
- соответствует имени помощника. Это метод, который будет
- вызываться, когда в вашем шаблоне производится вызов
- <varname>$this->specialPurpose()</varname>. В нашем примере с
- помощником "specialPurpose" объявление требуемого метода должно
- быть <code>public function specialPurpose()</code>.
- </para></listitem>
- <listitem><para>
- Обычно класс не должен выполнять вывод, вместо этого
- он должен возвращать значение для вывода. Возвращаемое значение
- должно быть экранировано должным образом.
- </para></listitem>
- <listitem><para>
- Класс должен быть в файле, названном по имени класса.
- Снова используя пример с помощником "specialPurpose", мы
- должны дать файлу имя "SpecialPurpose.php".
- </para></listitem>
- </itemizedlist>
- <para>
- Размещайте класс помощника где-либо в одном из находящихся в
- стеке путей к помощникам, и <classname>Zend_View</classname> будет
- автоматически загружать, инстанцировать, сохранять и выполнять его.
- </para>
- <para>
- Вот пример кода нашего помощника <code>SpecialPurpose</code>:
- </para>
- <programlisting language="php"><![CDATA[
- class My_View_Helper_SpecialPurpose extends Zend_View_Helper_Abstract
- {
- protected $_count = 0;
- public function specialPurpose()
- {
- $this->_count++;
- $output = "I have seen 'The Jerk' {$this->_count} time(s).";
- return htmlspecialchars($output);
- }
- }
- ]]></programlisting>
- <para>
- Далее в скрипте вида вы можете вызывать помощника
- <code>SpecialPurpose</code> сколько угодно раз. Он будет
- инстанцирован один раз, и существует, пока существует
- экземпляр <classname>Zend_View</classname>.
- </para>
- <programlisting language="php"><![CDATA[
- // помните, что в скрипте вида $this ссылается на экземпляр Zend_View
- echo $this->specialPurpose();
- echo $this->specialPurpose();
- echo $this->specialPurpose();
- ]]></programlisting>
- <para>
- Результат должен быть примерно следующим:
- </para>
- <programlisting language="php"><![CDATA[
- I have seen 'The Jerk' 1 time(s).
- I have seen 'The Jerk' 2 time(s).
- I have seen 'The Jerk' 3 time(s).
- ]]></programlisting>
- <para>
- Иногда бывает, что нужен доступ к объекту <classname>Zend_View</classname> -
- например, нужно получить зарегистрированное значение кодировки
- или произвести рендеринг другого скрипта вида как часть
- действий, выполняемых вашим помощником. Для того, чтобы можно было
- получить доступ к объекту вида, ваш класс помощника должен иметь
- метод <code>setView($view)</code>, его пример показан ниже:
- </para>
- <programlisting language="php"><![CDATA[
- class My_View_Helper_ScriptPath
- {
- public $view;
- public function setView(Zend_View_Interface $view)
- {
- $this->view = $view;
- }
- public function scriptPath($script)
- {
- return $this->view->getScriptPath($script);
- }
- }
- ]]></programlisting>
- <para>
- Если ваш класс помощника имеет метод <code>setView()</code>, то он
- будет вызываться при первом инстанцировании класса помощника и его
- передаче текущему объекту вида. Реализация
- сохранения объекта вида и доступа к нему в вашем классе помощника
- остаются на ваше усмотрение.
- </para>
-
- <para>
- Если вы наследуете своего помощника от
- <classname>Zend_View_Helper_Abstract</classname>, то вам не нужно определять
- этот метод, поскольку он уже определен в родительском классе.
- </para>
- </sect2>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|