Шаблонизатор Miranda - разделение на блоки, подключение файлов. Часть 3
В шаблонизаторе фреймворка 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 файле тогда удалять ничего не нужно, изменения и так вступят в силу.