Хелперы

Часто в шаблоне требуется не только выводить данные, но и предварительно совершать с ними какие-либо действия (например, отрисовать форму, информер, элемент управления, баннерное место и т.д.). Тогда логику можно вынести в отдельные классы - Хелперы (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);
Метки: helpers
23.07.2015
Все статьи