У меня небольшой проект (mvc,OOP). Покажите пожалуйста как правильно подключать Twig и как его использовать в controller
Существует множество способов установки Twig-a. Самый простой и быстрый - это скачивание компонента с GitHub, после чего архив необходимо распаковать, и перекинуть каталог lib в папку с нашим проектом.
Ну а теперь давайте приступим к делу и рассмотрим структуру нашего небольшого проекта:
compilation_cache
lib
Twig
templates
base.html
books.html
index.php
Весь функционал, связанный с подключением и настройкой Twig-а, содержится в файле index.php. В папке templates мы будем хранить файлы шаблонов. В нашем случае, этих файлов 2: base.html с базовым html кодом и books.html с выводом списка книг. В каталоге compilation_cache будут помещаться PHP файлы, созданные Twig-ом для работы.
Итак, первое что нам необходимо сделать, так это подключить Twig:
require_once 'lib/Twig/Autoloader.php';
Twig_Autoloader::register();
После этого сообщаем шаблонизатору, где у нас хранятся файлы шаблонов. В качестве аргумента передаём путь к каталогу templates:
$loader = new Twig_Loader_Filesystem('templates');
Затем создаём объект шаблонизатора и указываем ещё несколько опций:
$twig = new Twig_Environment($loader, array(
'cache' => 'compilation_cache',
'auto_reload' => true
));
Параметру cache передаём путь к каталогу compilation_cache. Активируем опцию auto_reload, для того чтобы при обновлении страницы Twig заново обрабатывал шаблоны, и мы видели изменения. Если этого не сделать, то шаблонизатор просто закэширует страницы. Когда же работа над проектом будет завершена, эту опцию можно убрать, чтобы ваши страницы закэшировались и грузились ещё быстрее.
Для реализации нашего небольшого примера, возьмём список книг и сформируем массив вида ключ - значение:
$books = array(
array('number' => 'Книга 1', 'title' => 'Гарри Поттер и философский камень', 'date' => '30.06.1997'),
array('number' => 'Книга 2', 'title' => 'Гарри Поттер и Тайная комната', 'date' => '2.07.1998'),
array('number' => 'Книга 3', 'title' => 'Гарри Поттер и узник Азкабана', 'date' => '8.07.1999'),
array('number' => 'Книга 4', 'title' => 'Гарри Поттер и Кубок огня', 'date' => '8.07.2000'),
array('number' => 'Книга 5', 'title' => 'Гарри Поттер и Орден Феникса', 'date' => '21.07.2003'),
array('number' => 'Книга 6', 'title' => 'Гарри Поттер и Принц-полукровка', 'date' => '16.07.2005'),
array('number' => 'Книга 7', 'title' => 'Гарри Поттер и Дары Смерти', 'date' => '21.07.2007')
);
Для того чтобы передать данные в какой-то шаблон и вывести html результат, нам необходимо воспользоваться методом render(); В качестве первого аргумента передаём название файла шаблона, который будем выводить. В качестве второго -массив вида ключ - значение. В дальнейшем по заданным ключам мы будем получать доступ к нашим данным в самих шаблонах.
echo $twig->render('books.html', array('books' => $books));
Общий вид файла index.php
require_once 'lib/Twig/Autoloader.php';
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('templates');
$twig = new Twig_Environment($loader, array(
'cache' => 'compilation_cache',
'auto_reload' => true
));
$books = array(
array('number' => 'Книга 1', 'title' => 'Гарри Поттер и философский камень', 'date' => '30.06.1997'),
array('number' => 'Книга 2', 'title' => 'Гарри Поттер и Тайная комната', 'date' => '2.07.1998'),
array('number' => 'Книга 3', 'title' => 'Гарри Поттер и узник Азкабана', 'date' => '8.07.1999'),
array('number' => 'Книга 4', 'title' => 'Гарри Поттер и Кубок огня', 'date' => '8.07.2000'),
array('number' => 'Книга 5', 'title' => 'Гарри Поттер и Орден Феникса', 'date' => '21.07.2003'),
array('number' => 'Книга 6', 'title' => 'Гарри Поттер и Принц-полукровка', 'date' => '16.07.2005'),
array('number' => 'Книга 7', 'title' => 'Гарри Поттер и Дары Смерти', 'date' => '21.07.2007')
);
echo $twig->render('books.html', array('books' => $books));
Настройка базового шаблона.
Базовый шаблон представляет собой обычный html документ со специальными вставками:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head>
<title>{% block title %}{% endblock %}</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
</head>
<body>
<div id="content">
{% block content %}
{% endblock %}
</div>
</body>
</html>
В нашем главном шаблоне мы прописываем 2 блока: title и content. Названия блоков выбираем сами. В последствии, в эти общие блоки мы будем внедрять характерную для дочерних страниц информацию.
Настройка шаблона вывода книг
Для начала в дочернем шаблоне нам необходимо указать шаблон родителя:
{% extends "base.html" %}
Далее в блок title запишем название дочерней страницы, которая обработается Twig-ом и вставится между тегами title в базовом шаблоне:
{% block title %}Серия романов о Гарри Поттере{% endblock %}
Затем, пишем содержание, которое внедрится в блок под названием content в базовом шаблоне:
{% block content %}
<h1>Серия романов о Гарри Поттере</h1>
<div id="books">
{% for book in books %}
<div class="book">
<strong>{{book.number}}</strong>. "<em>{{book.title}}"</em> - {{book.date}}
</div>
{% endfor %}
</div>
{% endblock %}
Тут же в цикле for (Twig for) мы проходимся по всем книгам, которые передали в данный шаблон с помощью записи $twig->render('books.html', array('books' => $books)); и для извлечения значений обращаемся к элементам массива по ключам: {{book.number}}, {{book.title}} и так далее. Таким образом, после срабатывания метода $twig->render('books.html', array('books' => $books)), Twig подгрузит шаблон books.html и сформирует html содержание. Далее он распознает, что books.html - это дочерний шаблон base.html, и поместит сформированное содержание в базовый шаблон. После всего этого Twig вернёт нам полноценную html страницу.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня есть бот который при приветствии отправляет id пользователяПомогите реализовать генерацию этого id с помощью QR кода и отправку пользователю...
Итак, в интернете есть много инструкций, скриптов как сделать пагинатор для постраничного вывода из базы mysql, типа 1, 2, 3