Шаблонизатор Miranda - примеры работы. Часть 2
Продолжаем статью о PHP шаблонизаторе Miranda. В прошлой статье, мы узнали как создавать переменные и выводить их в фале шаблона. Как вы поняли если с помощью шаблонизатора работать сразу с PHP файлами то все функции которые доступны в PHP, вы можете использовать в файле шаблона. Но, что же делать если вам нужно избавится от PHP кода в своем шаблоне? Тогда вам нужно вызывать файлы шаблона которые содержат расширение .tpl . Эти файлы будут отправлены в искусственный компилятор шаблонизатора, после обработки всех методов конвертации данных из TPL в PHP, полученный код будет сохранен в папку templates / compiled с расширением .php
Если работать с TPL файлами, принцип создания переменных остается прежним. Можно воспользоваться $this->variable_name = 'variable value' и переменная создана. Другое дело синтаксис вывода данных в шаблон.
Файл index.php
<?php
include_once('libs/Miranda.php');
$Miranda = new Miranda;
$Miranda->user = 'Admin';
$Miranda->right = 'все';
echo $Miranda->make('user', array('ip' => '63.567.26.199'));
?>Файл templates / user.tpl
Привет, {{ $user }}<br />
Кол-во прав: {{ $right }}, последнии ip: {{ $ip }}Запускаем скрипт, все нужные нам данные выводятся. Теперь давайте посмотрим содержимое файла который был создан после компиляции данных из tpl в php. Файл будет лежать в templates / compiled / user.php
<?php # lastedit[1343422855] ?> Привет, <?php echo $user; ?> <br /> Кол-во прав: <?php echo $right; ?>, последнии ip: <?php echo $ip; ?>По сути, собственный синтаксис всех шаблонизаторов является мифом. Если данный код сохранить сразу в папке templates и вызвать, тогда файл user.tpl будет игнорироваться и шаблонизатор подключит user.php вместо tpl. Дальше покажу несколько примеров которые можно сделать с шаблонизатором Miranda.
Пример циклов for в TPL шаблоне
@begin for($n=0; $n<10; $n++)
Запись номер: {{ $n }}<br />
@endНапоминает паскальный begin, но я решил его по логики цепочки @begin, @end использовать для более внятного представления логичных блоков, где они начинаются и где заканчиваются.
Данный пример, после компилирования будет выглядеть так:
<?php for($n=0; $n<10; $n++) { ?>
Запись номер: <?php echo $n; ?><br />
<?php } ?>Циклы foreach в TPL шаблоне
В файле index.php мы передадим в шаблон массив который будет содержать ID и логин пользователей. Посмотрим как будет выглядеть скрипт в шаблоне.Файл index.php
$Miranda->user_ids = array(
102 => 'John',
139 => 'Ingrid',
403 => 'Michel'
);
echo $Miranda->make('user'); Файл templates / user.tpl
@begin foreach($user_ids as $id => $value)
ID: {{ $id }} логин: {{ $value }}
@endПосле компилирования будет выглядеть так:
<?php foreach($user_ids as $id => $value) { ?>
ID: <?php echo $id; ?> логин: <?php echo $value; ?><br />
<?php } ?>Условия if / else в шаблоне
@begin if('abc' != 'def')
Неправильно
@else
Правильно
@endУсловия if / elseif / else в шаблонизаторе
@begin if(1==2)
Wrong
@begin elseif(2==2)
Yes
@else
Unknown
@endЕсть один момент который мне не нравится в шаблонизаторе Laravel, там нельзя сразу в шаблоне создавать переменные. В какой-то мере я согласен, файл шаблона этим заниматься не должен. Вот банальная ситуация, нужно вывести на страницу список товаров и каждому товару свой номер в списке (не уникальный ID из базы а его номер в очереди). Дело в том, что все что находится в блоке {{ код }} у них вызывается echo. Если делать проверки, например мне нужно было товар который в очереди номер 3, сделать особый стиль рамки. Я пробовал сделать {{ $n += 1 }} но все равно рядом с названием товара стояла цифра, т.к. $n был афиширован каждый раз через echo. В своем шаблонизаторе я решил не допустить такого.
@begin foreach($Goods as $key => $value)
{{ $order += 1 }}
В очередь, номер: {{ $order }}: {{ $value['name'] }}
@begin if($order == 3)
Это особый товар!
@end
@endПосле компиляции, мы получим такой код:<?php foreach($Goods as $key => $value) { ?>
<?php $order += 1; ?>
В очередь, номер: <?php echo $order; ?>: <?php echo $value['name']; ?>
<?php if($order == 3) { ?>
Это особый товар!
<?php } ?>
<?php } ?>В следующей статьи, мы обсудим создание блоков и подключение из файла шаблона как PHP файлов так и TPL.

Автор Добрый день!
Как можно осуществить перебор и вывод в шаблон массив array('menu' => array('news' => array('title' => 'News', 'link' => '/news')))
Зарание спасибо!