Powered by CodeIgniter

Шаблонизатор

В 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:'Пусто'}