Встроенный шаблонизатор



Этот шаблонизатор включен в фреймворке по умолчанию. Принцип работы с ним коротко описан здесь.

Интерфейс шаблонизатора представлен следующими методами:

1 selectTpl() Выбирает шаблон
2 assign() Передает переменные в шаблон
3 assignHtml() Передает обработанные переменные в шаблон
4 setBlock() Устанавливает блок
5 clearBlock() Удаляет блок
6 extendsTpl() Наследует макет от шаблона
7 parseTpl() Разбирает и заполняет шаблон
8 display() Визуализирует шаблон




selectTpl() public method

Выбирает шаблон

Метод загружает для разбора выбранный шаблон. Аргументом принимает путь от директории с шаблонами и название файла без расширения

public Template::selectTpl ( $tplName )
$tplName string Имя шаблона без расширения
return $this Объект


assign() public method

Передает переменные в шаблон

Этот метод передает значения переменных в шаблон как по имени, так и массивом. При передаче массива ключи становятся именами переменных, а значения их заполняют.

Смотри еще assignHtml().

public Template::assign ( $data, $value null )
$data string|array Имя переменной в шаблоне. Либо массив, где ключи - имена переменных.
$value string Значение переменной, если первым аргументом передано имя.
return $this Объект


assignHtml() public method

Передает переменные в шаблон

Этот метод передает значения переменных в шаблон как по имени, так и массивом, предварительно обработав их htmlspecialchars(). При передаче массива, ключи становятся именами переменных, а значения их заполняют.

Смотри еще assign().

public Template::assignHtml ( $data, $value null )
$data string|array Имя переменной в шаблоне. Либо массив, где ключи - имена переменных.
$value string Значение переменной, если первым аргументом передано имя.
return $this Объект


setBlock() public method

Устанавливает блок

Этот метод визуализирует блок, выделенный специальной разметкой
<!--// blockName -->Block<!--// blockName end -->
столько раз, сколько раз вызван метод.

Смотри еще clearBlock().

public Template::setBlock ( $blockName )
$blockName string Название устанавливаемого блока.
return $this Объект


clearBlock() public method

Удаляет блок

Удаляет из стека шаблонизатора блок с названием, переданным в аргумент. Но оставляет уже визуализированные.

Смотри еще setBlock().

public Template::clearBlock ( $blockName )
$blockName string Название удаляемого блока.
return $this Объект


extendsTpl() public method

Наследует макет от шаблона

Помещает шаблон в макет и передает в макет переменные, назначенные в шаблоне.

public Template::extendsTpl ( $block, $layout null )
$block string Блок (имя переменной), куда будет помещен шаблон
$layout string Макет (главный шаблон)
return $this Объект


parseTpl() public method

Разбирает и заполняет шаблон

Возвращает заполненный шаблон в виде строки.

public Template::parseTpl ( )
return string Заполненный шаблон


display() public method

Визуализирует шаблон

Выдает результат работы шаблонизатора в поток.

public Template::display ( )
return void



Примеры использования.

Принцип действия очень простой. Допустим, у нас есть макет (главный шаблон).

www\theme\tpl\index.tpl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ABC-Framework</title>
</head>
 
<body>
<div class="content">
<!--// content -->
<!--// content end -->
</div>
<div class="footer">
© 2015-<?=date('Y'); ?> IRBIS-team
</div>
</body>
</html>



Как видите, в нем есть блок, который формируется из специальных HTML комментариев. Это обычный комментарий, только с двумя слэшами в начале. Вот на такие блоки и ориентируется шаблонизатор.

Сделаем второй шаблон для наглядности:

www\theme\tpl\main.tpl
1
2
3
4
5
6
7
8
<!--// hello -->
<div style="text-align:center">
<h2>{$hello}</h2>
</div>
<!--// hello end -->
 



Обратите внимание на стиль написания переменных, это идентично <?=$hello?>. Если хочется использовать шаблоны с PHP синтаксисом, то можно задействовать нативный шаблонизатор.

Управлять шаблонами можно как напрямую из контроллера, так и из слоя view, если они отнаследованы от базового класса фреймворка. Однако управлением из контроллера лучше не увлекаться, так как можно получить антипаттерн ТТУК (Толстые Тупые Уродливые Контроллеры). В слое представления это может выглядеть так:

App\Views\MainView.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php   

namespace App\Views

use 
ABC\Core\Base
   
class 
MainView extends Base 

    public function 
createHello() 
    { 
        
// Выбираем шаблон 
        
$this->selectTpl('main'); 
        
// Получаем контент из модели 
        
$data $this->getModel('MainModel')->getContent();
        
// Передаем контент в переменную $hello шаблона 
        
$this->tpl->assign('hello'$content['hello']); 
        
// Шаблонизатор наследует макет (по умолчанию index.tpl) 
        // и выводит в него шаблон 
        
$this->tpl->extendsTpl('content'); 
        
// Выводим результат в поток 
        
$this->render(); 
    } 
}  




Если потребуется еще один (или несколько) экземпляров шаблонизатора, получить их можно из сервиса:

App\Views\MainView.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php 
  
namespace App\Views;  

use \
ABC;  
use 
ABC\Core\Base;  
    
class 
MainView extends Base  
{  
    public function 
createHello()  
    {  
// Новый экземпляр шаблонизатора  
        
$tpl ABC::newService(ABC::TEMPLATE);  
        
$tpl->selectTpl('main'); 
     
        
$data $this->getModel('MainModel')->getContent();
        
$tpl->assignHtml($data);  
        
$tpl->setBlock('hello');  
        
$tpl->extendsTpl('content');  
        
$tpl->display();  
    }