Когда мы (как и мой деловой партнер и я) начали разработку третьей версии нашей программы с открытым исходным кодом (нашего первого в истории «коммерческого» продукта), Olate Download, нам пришлось решить, как мы собираемся обрабатывать шаблоны, чтобы позволить пользователю настроить свой сайт. В то время доступными нам вариантами были использование Smarty (или поиск другого движка) или создание собственного движка шаблонов для его обработки. Мы взглянули на Smarty и решили, что это слишком сложно для нашего простого приложения для управления загрузкой. Таким образом, мы пошли дальше и создали нашу собственную систему.
Оглядываясь назад на наш двигатель, он выполняет свою работу, но он ограничен. Мы добавили наш собственный базовый синтаксис структуры управления и встроенные включения и даже простую языковую систему. Это хорошо сработало.
Через несколько месяцев после того, как мы выпустили этот продукт, я начал разработку нашего последнего продукта — платного приложения для управления продажами программного обеспечения. Это также означало наличие системы шаблонов, потому что это самый простой способ настройки продукта. Недавно я прочитал статью в PHP Magazine о движке под названием Savant2 . Поэкспериментировав, я решил, что на этот раз я не хочу создавать свою собственную систему, но буду использовать Savant для питания системы шаблонов.
Примечание: одна из хороших сторон использования сторонней системы, а не написания собственной, заключается в том, что разработчики продукта обычно стремятся улучшить этот продукт. Они не участвуют в вашей разработке, поэтому они работают над своей программой, улучшая ее, исправляя ошибки и обновляя. Это означает, что часть вашего продукта улучшается без необходимости делать что-либо, кроме обновления вашей интеграции! Вы можете работать с другими частями вашего продукта, пока этот бит обрабатывается кем-то другим.
Сравнивать Savant и Smarty сложно. Да, они оба являются шаблонизаторами, но Savant не компилирует свои шаблоны. Он также не имеет собственного встроенного синтаксиса сценариев. Он использует PHP. Многие люди также считают Smarty «тяжелым» с множеством сложных функций, которые не обязательно нужны во всех ситуациях. Например, мне не требовалось кэширование или компиляция в моих продуктах, и я также хотел работать с синтаксисом PHP в шаблонах, а не с пользовательским синтаксисом, который есть у Smarty.
[quote = ”Savant Website”] Короче говоря, PHP сам по себе является языком шаблонов, поэтому в общем случае нет необходимости в другом языке шаблонов поверх него. Однако в некоторых случаях использование настраиваемой разметки безопаснее, чем PHP; по этой причине Savant позволяет вам подключить собственный компилятор для ваших собственных целей. [/ quote]
(Также см. Статьи Гарри Фьюкса и Брайана Лозье )
Savant2
Идея, стоящая за Savant, заключается в том, что любой разработчик PHP должен пытаться отделить дизайн от самого приложения. т.е. отделить HTML от кода PHP, который выполняет большинство функций. Это Smarty делает 100% — вы не видите PHP в шаблонах. Но в Саванте это не так. Хотя весь основной код находится в отдельных файлах PHP, в шаблонах есть немного PHP.
У Savant всегда есть 2 файла. Один из них — это файл PHP, который выполняет большую часть работы, а другой — файл шаблона (обычно с расширением .tpl.php).
Чтобы проиллюстрировать это, вот пример, где у меня есть Savant2.php в том же каталоге:
'James', 'Country' => 'UK'), array('name' => 'Jill', 'Country' => 'Canada'));
$ template-> assign (‘title’, $ title); // Назначение переменной для использования в шаблоне
$ template-> assign (‘клиенты’, $ список);
$ Template-> дисплей ( ‘customers.tpl.php’); // Показать шаблон сейчас
?>
В HTML-шаблоне customer.tpl.php я хотел бы иметь следующее:
... HTML ...
клиенты)):?>
заглавие; ?>
клиенты как $ key => $ value):?>
Покупатель | Страна |
---|---|
Там нет клиентов.
… HTML …
Это перекликается с двумя клиентами, которых я добавил в массив $ list. Обратите внимание, что переменные, назначенные из вызова $ template-> assign (), являются переменными класса с использованием $ this-> varname. Также обратите внимание, что я использую управляющие структуры PHP (сокращенные версии) в шаблоне.
Плагины
Это очень простой пример, и настоящая полезность Savant заключается в его различных плагинах и фильтрах.
[quote = ”Savant Website”] Шаблонные плагины — это объекты, которые вы можете вызывать из вашего шаблона для автоматизации повторяющихся задач. Savant загружает подключаемые объекты динамически по мере их вызова, поэтому вам не нужно предварительно загружать их. Однако, если вы хотите предварительно загрузить плагин, вы можете иногда настроить его поведение заранее; Возможность настройки плагина зависит от конкретного плагина. [/ quote]
Доступные плагины включают генерацию форм, отображение изображений / CSS / JS и общие параметры, такие как форматирование даты. Одним из наиболее полезных является плагин списка опций.
Одна из проблем с динамически генерируемыми списками опций — выбор значения по умолчанию. Это легко сделать с помощью плагина настроек .
Например, при редактировании записи базы данных у меня может быть такой код:
// Status list menu options $status_options = array(1 => 'Active', 0 => 'Disabled'); $template->assign('status_options', $status_options);
Это устанавливает параметры раскрывающегося меню статуса и присваивает их переменной шаблона. В другом месте кода я уже получил данные из записи в базе данных.
В шаблоне я могу затем создать список, заполнить его двумя опциями, а также установить значение по умолчанию на основе данных, возвращаемых из моей записи в базе данных:
Здесь вызывается метод плагина. Первый параметр — это имя плагина, второй — массив параметров, а третий — значение по умолчанию. Это значение может быть в любой точке списка, оно должно ссылаться только на ключ массива предоставленных вами опций. Вывод может выглядеть так:
Еще один действительно полезный плагин — это флажок HTML. Я уверен, что все сталкивались с проблемой определения значения галочки! Savant облегчает работу с плагином checkbox, поэтому при установке флажка легко установить значение. Вы также можете легко установить его в качестве значения при редактировании записи базы данных (например), как в меню параметров выше.
Savant2 работает как с PHP4, так и с PHP5 ( Savant3 написан специально для PHP5).
Работая с Savant примерно с октября прошлого года, я смог сделать с ней все, что хочу. Я обнаружил, что он легко справляется с большим приложением, таким как мое, и я ожидаю, что он может легко масштабироваться в обоих направлениях. Он не раздут, он хорошо закодирован (включая исходную документацию PHPDoc) и делает именно то, что мне нужно.
Вокруг много двигателей. Это все о поиске того, что вам нравится и подходит вашему проекту. Вы найдете полезный список движков по адресу http://www.sitepoint.com/forums/showthread.php?threadid=123769.
Праздничный день
Это будет мой последний пост за неделю. Завтра я собираюсь в отпуск в Канаду и вернусь на следующей неделе 5-го, когда я возобновлю свои обычные (через день) посты.