В скрипте вида часто бывает так, что небходимо выполнять определенный набор функций повторно; например, формирование даты, генерация элементов формы, отображение ссылок. Вы можете использовать вспомогательные классы для выполнения этих действий.
Чтобы применять вспопогательные классы ("помощников") в своем скрипте вида,
вызывайте их, используя $this->имяПомощника()
.
Zend_View
загрузит класс Zend_View_Helper_ИмяПомощника
,
создаст его объект, и вызовет его метод имяПомощника()
.
Этот объект находится постоянно внутри экземпляра Zend_View
и повторно испольуется во всех вызовах $this->имяПомощника()
.
Zend_View
снабжен начальным набором вспомогательных
классов, все они имеют отношение к генерации элеметов форм.
Каждый из них автоматически выполняет соответствующую экранизацию
выходных данных. Это:
formButton($name, $value, $attribs)
: Создает элемент
<input type="button" />
.
formCheckbox($name, $value, $attribs, $options)
:
Создает элемент <input type="checkbox" />
(флажок опций). Параметр $options
является массивом,
в котором первым значением является "выбранное" (checked) значение,
вторым -- "невыбранное" значение (по умолчанию это '1' and '0').
Если $value
соответствует "выбранному" значению,
то этот флажок опций будет выбран.
formFile($name, $value, $attribs)
: Создает
элемент <input type="file" />
.
formHidden($name, $value, $attribs)
: Создает
элемент <input type="hidden" />
.
formPassword($name, $value, $attribs)
: Создает
элемент <input type="password" />
.
formRadio($name, $value, $attribs, $options)
: Создает
последовательность элементов <input type="radio" />
(переключатель опций). В массиве $options
ключ
элемента является значением переключателя, значение
элемента является текстом к переключателю. Переключатель опций
со значением $value
будет предварительно выбран.
formReset($name, $value, $attribs)
: Создает
элемент <input type="password" />
.
formSelect($name, $value, $attribs, $options)
:
Создает блок <select>...</select>
,
с одной опцией <option>
на каждый
элемент массива $options
. В массиве
$options
ключ элемента является значением опции,
значение элемента является текстом опции. Опция со значением
$value
будет предварительно выбрана.
formSubmit($name, $value, $attribs)
: Создает
элемент <input type="submit" />
.
formText($name, $value, $attribs)
: Создает
элемент <input type="text" />
.
formTextarea($name, $value, $attribs)
: Создает
блок <textarea>...</textarea>
.
Использование их в скрипте вида очень простое, вот пример. Обратите внимание, что это все, что вам нужно для их вызова -- они будут загружаться и инстанцироваться самостоятельно, когда будут нужны.
<?php // внутри вашего скрипта вида $this ссылается на экземпляр Zend_View // // предположим, что вы уже имеете последовательность опций // в виде массива ('us' => 'United States', 'il' => // 'Israel', 'de' => 'Germany') именем $countries <!-- // inside your view script, $this refers to the Zend_View instance. // // say that you have already assigned a series of select options under // the name $countries as array('us' => 'United States', 'il' => // 'Israel', 'de' => 'Germany'). --> ?> <form action="action.php" method="post"> <p><label>Your Email: <?php echo $this->formText('email', '[email protected]', 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>
Результрирующие выходные данные этого скрипта вида будут выглядеть наподобие этого:
<form action="action.php" method="post"> <p><label>Your Email: <input type="text" name="email" value="[email protected]" 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>
Как и для скриптов вида, ваш контроллер может задать
стек путей, в которых Zend_View
должен искать
вспомогательные классы. По умолчанию Zend_View
ищет вспомогательные классы в Zend/View/Helper/*
. Вы можете
приказать Zend_View
искать в других местах,
используя методы setHelperPath()
и
addHelperPath()
.
<?php $view = new Zend_View(); $view->setHelperPath('/path/to/more/helpers'); ?>
Вы можете "складывать" в стек пути, испоьзуя метод
addHelperPath()
. Если вы добавили
пути в стек, то Zend_View
будет искать запрошенный
вспомогательный класс в этих путях, начиная с пути, добавленного
последним. Это дает возможность добавлять (или даже замещать)
к начальному набору свои собственные вспомогательные классы.
<?php $view = new Zend_View(); $view->addHelperPath('/path/to/some/helpers'); $view->addHelperPath('/other/path/to/helpers'); // теперь, когда вы вызываете $this->helperName(), Zend_View будет искать // сначала "/other/path/to/helpers/HelperName.php", // затем "/path/to/some/helpers/HelperName", и под конец // "Zend/View/Helpers/HelperName.php". ?>
Написание собственных вспомогательных классов является довольно простым делом -- просто следуйте этим правилам:
Имя класса должно быть Zend_View_Helper_*
,
где * является именем самого "помощника". Например, если
вы написали "помощника", называющегося "specialPurpose",
имя класса должно быть "Zend_View_Helper_SpecialPurpose"
(обратите внимание на использование главных букв).
Класс должен иметь открытый метод, имя которого
соответствует имени "помощника". Это метод, который будет
вызываться, когда ваш шаблон вызывает
$this->specialPurpose()
. В нашем примере c помощником
"specialPurpose" объявление требуемого метода должно быть
public function specialPurpose()
.
Обычно класс не должен выполнять вывод, вместо этого он должен возвращать значение для вывода. Возвращаемое значение должно быть экранизировано должным образом.
Класс должен быть в файле, названном по имени метода. Снова используя пример с помощником "specialPurpose", мы должны дать файлу имя "SpecialPurpose.php".
Размещайте вспомогательный класс где-либо в одном из находящихся в стеке путей
к "помощникам", и Zend_View
будет автоматически загружать,
инстанцировать, сохранять и выполнять его.
Вот пример кода нашего помощника "SpecialPurpose":
<?php class Zend_View_Helper_SpecialPurpose { protected $_count = 0; public function specialPurpose() { $this->_count++; $output = "I have seen 'The Jerk' {$this->_count} time(s)."; return htmlspecialchars($output); } } ?>
Далее в скрипте вида вы можете вызывать помощника SpecialPurpose столько раз, сколько вам нужно. Он будет инстанцирован один раз, и сохраняется в течение существования экземпляра Zend_View.
<?php // помните, что в скрипте вида $this ссылается на экземпляр Zend_View echo $this->specialPurpose(); echo $this->specialPurpose(); echo $this->specialPurpose(); ?>
Результат должен выглядеть наподобие этого:
I have seen 'The Jerk' 1 time(s). I have seen 'The Jerk' 2 time(s). I have seen 'The Jerk' 3 time(s).