Zend Framework предоставляет ряд помощников (Helpers), которые используются во view скриптах. К ним относятся, например: хелперы для создания разных HTML элементов, для построения ссылок, для экранирования вывода (escape) и другое. Но иногда возникает необходимость в создании собственного (custom) view helper. Рассмотрим рекомендации по этому поводу.
Helper представляет собой класс, который должен соблюдать некоторые требования:
- Имя класса должно заканчиваться именем хелпера
- Helper должен иметь public метод, имя которого совпадает с именем хелпера
- Метод не должен использовать echo или print функции - необходимо возвращать значение
- Необязательная рекомендация: разработчики Zend Framework советуют наследоваьб свой view helper класс от Zend_View_Helper_Abstract или имплементировать интерфейс Zend_View_Helper_Interface (в следующих релизах ZF планируется упростить набор правил для создания custom view helper, которые приведены выше)
Что ж, попробуем написать свой помощник вида.
В Smarty есть модификатор, который отрезает часть текста - truncate. Его можно использовать, например при выводе анонса новостей. Создадим и мы helper, который реализует данный функционал.
- Создаем класс, который находится по такому пути: library/Custom/View/Helper/Truncate.php (используется классическая структура директорий Zend Framework)
<?php class Custom_View_Helper_Truncate extends Zend_View_Helper_Abstract { public function truncate($string, $length = 50, $postfix = ‘…’) { $truncated = trim($string); $length = (int)$length; if (!$string) { return $truncated; } $fullLength = iconv_strlen($truncated, ‘UTF-8′); if ($fullLength > $length) { $truncated = trim(iconv_substr($truncated, 0, $length, ‘UTF-8′)) . $postfix; } return $truncated; } }
- Добавляем путь к view хелперам в нашем bootstrap файле
<?php $layout = Zend_Layout::startMvc(array(‘layoutPath’ => ‘../application/layouts’)); $layout->getView()->addHelperPath(‘Custom/View/Helper’, ‘Custom_View_Helper’); ?>
После этого наш хелпер готов к употреблению ))) В скрипте вида используем его так:
<?php $this->truncate($this->someBigString, 100); ?>
P.S.: данный helper корректно работает с любой кодировкой (iconv рулит, но можно и заменить на multibyte string functions)
Май 21st, 2009 at 6:44 пп
Побольше бы возможностей этому помощнику, например, научить бы его не рвать слова - он был бы действительно полезным!
Май 22nd, 2009 at 9:29 дп
Согласен, можно доработать.