Прежде всего, я пойду вперед и начну со Smarty, так как я довольно часто этим пользуюсь. Поскольку это вики сообщества, вы можете добавить примеры своего собственного движка шаблонов, если захотите.
Установка Smarty
Шаблонирование предоставляет отличный способ структурирования вашего HTML и отделения вашего HTML-контента от вашего логического кода. Он также позволяет упорядочить отдельные компоненты вашей HTML-страницы, что упрощает управление и позволяет повторно использовать его.
Для начала рассмотрим простую страницу со Smarty. Прежде всего, вам нужно получить Smarty. Итак, мы перейдем на страницу загрузки Smarty . На момент написания этой статьи последней стабильной версией является Smarty 3.0.7, поэтому мы продолжим и загрузим ее. Загрузка файла .tar.gz
или .zip
зависит от вашей системы. Для пользователей Windows и Mac (наиболее вероятно, использующих MAMP
или XAMPP
), .zip
, вероятно, является хорошим выбором, хотя вы всегда можете найти программы для обработки файлов .tar.gz
. Пользователи с системами типа Linux или * BSD могут получить версию .tar.gz
.
Теперь мы извлекаем файл и получаем следующую структуру каталогов:
COPYING.lib
demo/
libs/
|__ Smarty.class.php
|__ ... some other files and folders ...
README
SMARTY2_BC_NOTES
Теперь Smarty.class.php - это основной файл, который мы собираемся включить для использования Smarty. Он находится в каталоге libs. Поскольку «libs» - это довольно общее звучащее имя, мы собираемся скопировать его в корневую папку нашего документа и переименовать в Smarty
. Теперь наша теоретическая корневая папка документа в настоящее время пуста, так что в итоге она будет выглядеть так:
Smarty/
|__ Smarty.class.php
|__ ... some other files and folders ...
Простой шаблон
Теперь, когда Smarty установлен, мы создадим очень простой шаблон и скрипт php, чтобы показать, как он работает. Прежде всего, чтобы все было организовано, мы создадим папку templates
для хранения наших шаблонов. Затем мы создадим файл mypage.php
и файл mypage.tpl
в нашей папке templates
:
mypage.php
templates/
|__ mypage.tpl
Smarty/
|__ Smarty.class.php
|__ ... some other files and folders ...
mypage.php
<?php
require_once('Smarty/Smarty.class.php');
$smarty = new Smarty();
$smarty->assign("MYVAR", "Hello World");
$smarty->display("templates/mypage.tpl");
?>
шаблоны / mypage.tpl
<html>
<head>
<title>My Sample Page</title>
</head>
<body>
<h1>{$MYVAR}</h1>
</body>
</html>
Теперь, если мы перейдем к mypage.php
, например http://localhost:8000/mypage.php
, «Hello World» будет отображаться жирным шрифтом. Так что же случилось? Давайте пройдемся по коду:
require_once('Smarty/Smarty.class.php');
Здесь мы включаем основной класс Smarty. Нам это нужно для любой функциональности Smarty.
$smarty->assign("MYVAR", "Hello World");
Вы будете использовать это много. Команда assign принимает значение «Hello World» в этом примере и присваивает его имени «MYVAR». Если вы посмотрите на шаблон:
<h1>{$MYVAR}</h1>
Вы заметите {$MYVAR}
. {}
указывают Smarty, что ему нужно оценить выражение внутри. Это может быть команда или просто переменная. Это может привести к выводу или просто установить значение переменной. В этом случае он просто выводит значение $MYVAR
, которое мы присвоили.
$smarty->display("templates/mypage.tpl");
Наконец, мы говорим Smarty проанализировать шаблон, а затем отобразить его так, как если бы вы просто echo
'исключили HTML на странице PHP. Не правда ли? Теперь многие люди захотят перебирать массивы (то есть набор результатов db), поэтому давайте рассмотрим пример того, как этого добиться.
Цикл по массивам
Сначала мы внесем коррективы в наш код. Новые списки следующие:
mypage.php
<?php
require_once('Smarty/Smarty.class.php');
$myarray = array(
"John",
"Jane",
"Henry",
"Nancy",
"Gorilla"
);
$smarty = new Smarty();
$smarty->assign("MYARRAY", $myarray);
$smarty->display("templates/mypage.tpl");
?>
шаблоны / mypage.tpl
<html>
<head>
<title>My Sample Page</title>
</head>
<body>
<h1>Results</h1>
<ul>
{foreach $MYARRAY as $myvalue}
<li>{$myvalue}</li>
{/foreach}
</ul>
</body>
</html>
Если вы перезагрузите страницу, вы получите что-то вроде этого:
Теперь отметим только несколько изменений:
$smarty->assign("MYARRAY", $myarray);
Вместо строкового значения мы присвоили переменную, которая содержит массив. Это было передано Smarty, который использовал данные в цикле {foreach}
:
<ul>
{foreach $MYARRAY as $myvalue}
<li>{$myvalue}</li>
{/foreach}
</ul>
Foreach в Smarty очень похож на foreach
в PHP. В этом случае Smarty берет массив, который был присвоен $MYVALUE
, и проходит через него, устанавливая $myvalue
в качестве результата текущего значения цикла. Оттуда мы можем использовать {$myvalue}
для ссылки на каждый отдельный элемент. Теперь предположим, что мы хотим сделать этот неупорядоченный список виджетом для повторного использования в других местах. Мы можем сделать это, используя сами шаблоны в качестве переменных.
Шаблон Модуляризации
HTML может стать очень длинным очень быстро. Smarty помогает справиться с этим, позволяя разбивать части страницы на отдельные компоненты. Итак, что мы сделаем, это возьмем наш неупорядоченный список и поместим его на отдельную страницу. Наш новый код будет выглядеть так:
mypage.php
<?php
require_once('Smarty/Smarty.class.php');
$myarray = array(
"John",
"Jane",
"Henry",
"Nancy",
"Gorilla"
);
$smarty = new Smarty();
$smarty->assign("MYARRAY", $myarray);
$content = $smarty->fetch("templates/mycontent.tpl");
$smarty->assign("MYCONTENT", $content);
$smarty->display("templates/mypage.tpl");
?>
шаблоны / mypage.tpl
<html>
<head>
<title>My Sample Page</title>
</head>
<body>
<h1>Results</h1>
{$MYCONTENT}
</body>
</html>
mycontent.tpl
<ul>
{foreach $MYARRAY as $myvalue}
<li>{$myvalue}</li>
{/foreach}
</ul>
Результат, который мы получаем, тот же, но бэкэнд теперь более организован. Теперь мы можем повторно использовать этот файл mycontent.tpl
на других страницах, если захотим. Обычно в этой организации используются отдельные шаблоны верхнего и нижнего колонтитула, а также других частей страницы. Это позволяет вам сузить до соответствующих частей.
Так что же случилось с бэкэндом? Важная команда, на которую следует обратить внимание:
$content = $smarty->fetch("templates/mycontent.tpl");
fetch()
работает как отображение, за исключением того, что вместо вывода его сразу, он возвращает результат в виде строки отрендеренного HTML. Обратите внимание: поскольку в mycontent.tpl
используется $MYARRAY
, мы должны присвоить массив непосредственно перед ним, а не перед последним вызовом display()
. Этот порядок важен!
Заключение
На этом завершается базовое введение в Smarty и использование шаблонизатора для работы с вашим контентом. Документация Smarty предоставляет отличный ресурс для просмотра всего, на что способен smarty. Обязательно просмотрите все доступные команды, чтобы убедиться, что вы используете их эффективно!