Хелперы
Часто в шаблоне требуется не только выводить данные, но и предварительно совершать с ними какие-либо действия (например, отрисовать форму, информер, элемент управления, баннерное место и т.д.). Тогда логику можно вынести в отдельные классы - Хелперы (Helpers), которые будут содержать набор статических или динамических методов, посвященных решению определенного круга задач. Стоит учитывать, что создавать хелперы стоит лишь в том случае, когда применение их носит постоянный характер. Если же метод будет вызван всего раз, то нет смысла выносить его в отдельный класс.
Создание и хранение хелперов
Жесткой привязки для местоположения хелперов нет. Разработчик сам может решать, где хранить модули. Обычно предполагается, что хелпер, входящий в состав какого-либо компонента и имеющий имя, начинающееся с «Component.», будет располагаться в библиотеке компонента, папке app/components/Component_Name/lib/Helper.php.
Также нет ограничений на именование классов хелперов. Главное, класс хелпера должен реализовывать интерфейсы Core_ModuleInterface и Templates_HelperInterface. А при описании методов первым аргументом должен быть передан объект представления $view
.
Для примера: класс хелпера, реализующий методы доступа и чтения полей класса CMS_Fields.
// tao/lib/CMS/Fields/Helper.php class CMS_Fields_Helper implements Core_ModuleInterface, Templates_HelperInterface { ... // чтение поля по названию public function field($view, $name, $data) { $type = CMS_Fields::type($data); $type->view = $view; return $type->render($name, $data); } ...
Регистрация хелперов
Для активации работы хелпер необходимо зарегистрировать в системе. Для этого нужно воспользоваться одним из следующих методов.
- Регистрацию можно произвести в конфигурационных настройках компонента.
// app/components/Component_Name/config/component.php return array( 'templates' => array( 'helpers' => array( 'name_helper' => 'Component.Name_helper.Helper' ), ),
- Или зарегистрировать хелпер в методе инициализации компонента, применив метод класса CMS -
use_helper($name, $helper)
.
// app/components/Users/Users.php class Component_Users extends CMS_Component implements Core_ModuleInterface { static function initialize($config = array()) { CMS::use_helper('users', 'Component.Users.App.TemplatesHelper'); ... } ... }
Данные конструкции всего лишь регистрируют имя хелпера в системе, загрузки модуля при этом не происходит. Модуль загружается и подключается только при первом вызове хелпера из шаблона.
Вывод в шаблоне
Для вывода в шаблоне необходимо воспользоваться методом $this->name_helper->name_method()
. Например, вывод текстового блока в компоненте Users применение хелпера users
с методом logintext()
текстового блока.
<?= $this->users->logintext() ?>
Список стандартных хелперов
В системе реализованы стандартные хелперы - tags, assets, forms, maps
.
- assets - реализует подключение сторонних файлов (стилей, js-скриптов и др.). В настоящее время для подключения стилей или скриптов принято применять методы
use_style($filename, array $options = array()), use_script($filename, array $options = array()), use_scripts(...), use_styles(...)
.
<?= $this->assets->stylesheet_link_tag('styles.css') ?> <?= $this->assets->javascript_include_tag('jquery.js') ?>
- tags - содержит методы, формирующие теги.
- tag($name, array $attributes = array(), $close = true) - формирует тег. Где $name - название тега, $attributes - массив атрибутов тега, $close = признак, должен ли тег быть закрыт.
- content_tag($t, $name, $content, array $attributes = array()) - формирует и выводит тег с контентом.
- cdata_section($t, $content) - формирует тег CDATA с возможностью внесения и вывода данных.
<?= $this->tags->tag('img',array('src'=>'/image/photo.jpg','width'=>800,'height'=>600)) ?> <?= $this->tags->content_tag('b', 'Текст жирным шрифтом') ?>
- forms - формирует форму в шаблоне.
// начало и конец формирования формы в шаблоне. <?= $this->forms->begin_form($form) ?> <?= $this->forms->end_form() ?>
Кроме этого реализованы другие методы для формирования отдельных частей формы.
- begin_fieldset() , end_fieldset() - формирует и закрывает тег fieldset.
- begin_field(), end_field() - формирует поле формы в виде div-тега, автоматически валидируя соответствующее поле формы и метод, закрывающий тег поля с выводом ошибки, если она есть.
- field() - формирует полностью поле формы.
- fields() - формирует несколько полей формы.
- help() - формирует информационное сообщение.
- checkbox() - формирует checbox html-формы.
- radio() - формирует radio-button html-формы.
- label() - формирует тег label
- input() - формирует input html-формы.
- textarea() - формирование поля textarea
- submit() - Формирует div внутри которого button с заданными классами.
- password() - формирует password.
- upload() - формирует upload,
- hidden() - формирует поле hidden.
- datetime_select() - формирует теги для ввода и выбора даты.
- select_tag() - формирует тег select.
- select() - формирует select.
- object_select() - формирует теги select и option для object_select и object_multi_select полей формы
- object_multicheckbox() - формирует checkbox-ы для object_multi_select поля формы
- begin_form_tag(), end_form_tag() - формирует тег формы.
- map($service, $map_id, $name, $options = array(), $path_to_template = 'helpers/maps') - формирование и вывод карты. $service - название сервиса (yandex, google), $map_id - идентификатор карты, должен быть уникальным на странице, $name - произвольное имя, идентифицирующее карту, $options - массив настроек отображения карты.
Данный метод вывода карты применяется, например, в одноименной стандартной вставке MAPS.
... print $this->maps->map($type, $map_id, md5(serialize($options)), $options);