Шаблонизатор
В cogear используется собственный шаблонизатор.
Для того, чтобы обеспечить максимально гибкий и расширяемый способ работы, мы руководствовались следующими правилами:
Модификаторы путей шаблонов:
Для того, чтобы обеспечить максимально гибкий и расширяемый способ работы, мы руководствовались следующими правилами:
- Шаблонизатор обладает основным массивом информации, элементы которого могут быть ссылками на шаблоны или готовым html-кодом.
- Массив информации вывода, использующий числовые ключи, может быть переопределен в процессе работы приложения. Это дает максимальную расширяемость и гибкость структуры.
- Перед отображением вывода, шаблонизатор обрабатывает ссылки на шаблоны и объединяет их с другими элементами вывода в один html-код.
- Шаблонизатор компилирует ".tpl" шаблоны в PHP-код, поэтому по быстродействию он практически равен чистому PHP
Добавление информации в шаблонизатор
Предопределенными элементами шаблонизатора являются глобальные «шапка» и «подвал» сайта, «шапка» и «подвал» текущего шаблона системы. Все остальные элементы вывода определяются в процессе. Если в пути шаблона не указан модификатор, то он адресуется к папке шаблонов текущего компонента.Модификаторы путей шаблонов:
- «gear» — указывает на компонент gear.
- "%" — указывает на папку текущего шаблона.
// Добавляет шаблон info текущего компонента в порядке очереди.
// Передает ему параметры массива $data
$this->_template('info.tpl',$data);
// Можно не указывать расширение файла .tpl
$this->_template('info',$data);
// Можно указать позицию в глобальном массиве шаблона.
// Если на этой позиции есть элемент, он будет смещен по номеру выше.
$this->_template('info',$data,5);
// Можно заменить элемент на указанной позиции добавлением еще одного параметра.
$this->_template('info',$data,5,TRUE);
// Можно заменить элементы в определенном диапазоне.
$this->_template('info',$data,5,100);
// Можно заменить все элемент от указанного и до "подвала".
$this->_template('info',$data,5,'all');
// Также можно упразднить параметр с информацией, если он не нужен.
$this->_template('info',5,'all');
// Можно указать на шаблоны другого компонента
$this->_template('mail show',$data);
// Можно указать шаблон из папки текущего шаблона сайта
// /templates/текущий_шаблон/
$this->_template('%show',$data);
/*
* Если шаблон написан на PHP-Native, он не будет компилироваться
*/
// Также можно упразднить параметр с информацией, если он не нужен.
$this->_template('info.php',$data);
/*
* Передача готово кода осуществляется при помощи массива.
*/
$this->_template(array('<p>Текст, который не надо обрабатывать</p>'));
$this->_template(array('<p>Текст, который не надо обрабатывать</p>'),5);
$this->_template(array('<p>Текст, который не надо обрабатывать</p>'),5,TRUE);
$this->_template(array('<p>Текст, который не надо обрабатывать</p>'),5,10);
$this->_template(array('<p>Текст, который не надо обрабатывать</p>'),5,'all');
Для обработки шаблона на месте и возврата результата укажите значение TRUE параметру $position.$output = $this->_template('some_template',$data,TRUE);
Все функции моделей, названные «compile», обеспечивают вывод результата работы модели и могут принимать два последних аргумента метода работы с шаблонами.
// Пример для модели Breadcrumb
// Выведет результат в порядке очереди
$this->breadcrumb->compile();
// Вернет результат
$info = $this->breadcrumb->compile(TRUE);
// Выведет результат на определенную позицию
$this->bc->compile(10);
// Дополнительно заменит элемент по факту его присутствия
$this->bc->compile(10,TRUE);
Синтаксис шаблонизатора
Если вы решили пойти более простым путем, нежели PHP-Native, то вам следует ознакомиться с синтаксисом нашего шаблонизатора.
/**
* Для более быстрого написания кода шаблонизатор выступает в качестве "обертки" для PHP
*/
{foreach ($nodes as $node)}
{$node->body}
{/foreach}
/**
* Скобки условия указывать не обязательно
*/
{foreach $nodes as $node}
{$node->body}
{/foreach}
/**
* Данный код превращается в следующий PHP-код
*/
<?php foreach($nodes as $node): ?>
<?php if(isset($node->body)){ echo $node->body;} ?>
<?php endforeach;?>
/*
* Еще несколько операторов
*/
{if $a > $b}
{$var}
{elseif $a == $b}
Просто текст.
{else if $a < $b}
А можно и так!
{else}
Привет, Гость!
{/if}
{switch gettype($var)}
{case 'string'}
Это строка!
{break}
{default}
Это что-то другое!
{/switch}
/**
* Вы можете вызывать любые функции следующим образом
* ! -- без вывода
* ? -- с выводом
*/
// Выведет "200"
{? (100/2)*4}
// Ничего не выведет, но сохранит информацию
{! $i = 0}
/**
* Можно подключать другие шаблоны
*/
{include file="comment.tpl"}
/**
* Или даже так
*/
{include file=$path}
/**
* Опциональные параметры -- выводятся только при существовании переменной внутри скобок
*/
<div[ class="{$class}"][ id="{$id}"]>
{$text}
</div>
/**
* Применение функций к переменным
*
* Вы можете использовать любые функции PHP для модификации выводимых переменных
*/
{$text|default:'Пусто'}
{$text|strtolower}
{$text|stripslashes|strtolower|default:'Пусто'}
