Шаблонизатор Miranda - примеры работы. Часть 2

PHP Шаблонизатор MirandaПродолжаем статью о 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.

Шаблонизатор Miranda Часть 1 | Часть 2 | Часть 3

28 июля 2012, 01:02 PHPmowshon4816RSS
Комментариев: 1
  1. 26.06.2014, 10:08Вячеслав

    Автор Добрый день!

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

    Зарание спасибо!

Оставьте комментарий!

Комментарий будет опубликован после проверки

Имя и сайт используются только при регистрации

(обязательно)