Содержание
Template
Расширяемый шаблонизатор F3 дает вам всю гибкость, необходимую для современных шаблонов. Плагин Template расширяет класс Preview и специально разработан для шаблонов в стиле XML. Рекомендуем прочитать руководство о шаблонах пред этой статьей.
Если вы ищете сводный обзор доступных шаблонных директив и их синтаксиса, см. Краткий справочник.
Пространство имен: \
Расположение файла:lib/template.php
Инициализация
Вернуть уникальный экземпляр класса
$template = \Template::instance();
Класс Template использует фабричную оболочку Prefab , поэтому вы можете получить один и тот же экземпляр класса Template в любой точке вашего кода.
extend
Расширьте механизм шаблонов F3 с помощью настраиваемого тега
void extend ( string $tag, callback $func )
Функция extend позволяет вам создать свой собственный пользовательский тег шаблона. Это можно рассматривать как hook для механизма шаблонов F3.
$tag это имя пользовательского тега (без <>) . Не давайте уже существующие ,в директиве шаблонов F3, имена своим тегам , так как ваш обработчик тега не будет вызываться. На сегодняшний день вы не можете использовать extend для переопределения существующей директивы шаблона F3.
$func это имя вашей настраиваемой функции, которую F3 будет выполнять в обратном вызове, когда найдет вашу настраиваемую функцию $tag во время рендеринга шаблона.
Итак, чтобы определить новый настраиваемый тег и зарегистрировать/перехватить его настраиваемый обработчик, пишем:
\Template::instance()->extend('my_new_special_tag','MyImageViewHelper::my_tag_renderer');
Но давайте посмотрим на функциональный пример, чтобы увидеть, как это работает на начальном уровне:
Идея заключается в том , чтобы создать новый HTML тег <image>, который будет иметь возможность изменять размер изображения на лету в соответствии с width и height атрибутами.
class ImageViewHelper { static public function render($args) { // retrieve the attributes of the template tag, as found in the template // in our case, we expect 'src', 'width' and 'height', and optionally 'crop' $attr = $args['@attrib']; // provided by the F3 template engine $imagepath = $attr['src']; $imgObj = new \Image($imagepath); $imgObj->resize( $attr['width'], $attr['height'], ((isset($attr['crop']) && $attr['crop']=='true') ? true : false) ); $f3 = \Base::instance(); // to avoid clash, build a unique name for the new generated image $file_name = $f3->hash($imagepath.$attr['width'].$attr['height']).'.png'; // save it for example in TEMP $imagepath = $f3->get('TEMP').$file_name; // convert it to PNG and save it to a file $f3->write($imagepath, $imgObj->dump('png')); // done! return the HTML markup return sprintf ('<img src="/%s" width="%u" height="%u" />', $imagepath,$attr['width'],$attr['height']); } } // register the tag renderer either in index.php or in your view controller \Template::instance()->extend('image','ImageViewHelper::render');
Базовый фрагмент выше принимает все теги html, которые выглядят следующим образом:
<image src="images/south-park.jpg" width="60" height="60" crop="true" />
и масштабирует изображение, указанное в src атрибуте, до указанных width=«60» height=«60» размеров, затем копирует новое масштабированное изображение в папку TEMP и, наконец, генерирует выходной HTML-код, аналогичный <img src=«/tmp/0dgsnl2kmnb.png» width=«60» height=«60» />вашему шаблону.
Зная, что все шаблоны F3 предварительно обработаны и кэшированы, мы получаем что, наш Image Tag Renderer будет обрабатывать файл только один раз, а не при каждом запросе.
parse
Парсит директивы и токены шаблона
string|array parse ( string $text )
Например:
<div> <h1>My favorite books</h1> <ul> <F3 group="{{ @books }}" value="{{ @book }}"> <li>{{ @book.title }}</li> </F3> </ul> </div>
возвращает:
array (size=3) 0 => string '<div> <h1>My favorite books</h1> <ul> ' (length=53) 1 => array (size=1) 'repeat' => array (size=2) '@attrib' => array (size=2) 'group' => string '{{ @books }}' (length=12) 'value' => string '{{ @book }}' (length=11) 0 => string '<li>{{ @book.title }}</li>' (length=38) 2 => string '</ul> </div>' (length=19)