Шаблонизатор Miranda - разделение на блоки, подключение файлов. Часть 3

PHP Шаблонизатор MirandaВ шаблонизаторе фреймворка Laravel, мне очень понравилась как они разделяют части шаблона на разные блоки не трогая при этом главный файл шаблона который самый последний выводится и подключает в себя все блоки. Создается главный файл, в нем каркас сайта подключается стили, скрипты и т.д. и в участке где должен быть динамичный контент который будет вызывается в зависимости от текущего URL или запрашиваемой информации стоит вызов данных из блоков(секции) @view_section(content). И все, главный файл вы не трогаете а работаете и вызываете остальных а уже в этих остальных файлов, указываете какому файлу они принадлежат.

Начнем укрепление своих знании на практике. Создаем небольшой HTML каркас для вывода данных.

Файл templates / main.tpl

<html> 
     <head> 
          <title> 
               {{ $title }}
          </title>
     </head> 
     <body> 
         @view_section(content)
     </body> 
</html>
Если вызвать его напрямую не отправляя нужные переменные и не создавая предварительно содержимое блока content, будет просто белая страница. Нам нужно создать другой файл шаблона который будет содержать в себе данные блока content и заголовок страницы. Допустим, это страница контактов. Создаем файл contacts.tpl

@layout(main)
@section(content)
    Моб: +70000000000<br />
    E-mail: admin@my
@section_end
Функция layout() указывает какой файл является родительным файлу contacts.tpl это значит, что после выявления и наполнение всех блоков которые есть в файле contacts.tpl они будет отправлены файлу main.tpl. Главный файл не обязательно должен быть TPL файл, он может так же быть с расширением PHP.

Файл index.php который вызовет шаблон 

<?php
include_once('libs/Miranda.php');
$Miranda = new Miranda;
$Miranda->title = 'Контакты администратора';
echo $Miranda->make('contacts');
?>
Как можете заметить, вызываем мы не главный файл шаблона, а именно тот кто будет содержать данные запрашиваемой страницы. В данном случае у нас contacts.tpl, уже он вызовет главны файл который мы указали в @layout().

После компиляции, название файла будет немного другой, все зависит от иерархии вызова друг друга шаблонов. В данном случае будет templates / compiled / contacts_main.php

Вызов файлов из поддиректории папки templates

Если наш файл contacts.tpl будет не сразу в templates а например в templates / page тогда нам нужно в файле вызова метода make() добавить точку как разделитель директории до папки.

echo $Miranda->make('pages.contacts'); // путь: /var/www/templates/pages/contacts.tpl
echo $Miranda->make('pages.users.more.contacts'); // путь: /var/www/templates/pages/users/more/contacts.tpl
В случае если вы не хотите подключать блоки, но в то же время в шаблоне есть вызов блока, вы можете воспользоваться методом $Miranda->inject('content', 'text')

$Miranda = new Miranda;
$Miranda->title = 'Контакты администратора';
$Miranda->inject('content', 'Мои контакты');
echo $Miranda->make('main');

Подключение файлов в PHP шаблоны

Файл index.php

$Miranda = new Miranda;
echo $Miranda->make('go');
Если файл имеет расширение templates / go.php и в нем можно выполнить подключение другого файла будь то php или tpl, пользуемся методом $this->attach('file')

Файл templates / go.php

Подключаем данные из файла templates / menu.tpl <?php $this->attach('menu'); ?>

Подключение файлов в TPL шаблоне

Содержимое index.php не меняется если расширение файла go.php будет go.tpl. Меняется только содержимое TPL файла. Файл go.tpl

Подключаем данные из файла templates / menu.tpl @include(menu)
Помните, если вы сделали какие либо изменения в скрипте но они не входят в силу, следует удалить все из папки templates / compiled. Если изменения было сделано в TPL файле тогда удалять ничего не нужно, изменения и так вступят в силу.

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

28 июля 2012, 16:04 PHPmowshon7320RSS
Оставьте комментарий!

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

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

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