Шаблонизатор 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')))
Зарание спасибо!