Smarty — это движок шаблонов PHP, написанный Монте Ортом и Андреем Змиевским . Еще один шаблонный движок, говорите? Авторы (и я тоже) были бы не согласны. Smarty отличается от остальной части пакета. Что отличает Smarty от других шаблонизаторов, таких как FastTemplate и patTemplate, так это то, что Smarty компилирует ваши шаблоны в сценарии PHP, устраняя накладные расходы, возникающие при разборе шаблонов при каждом обращении к ним. Это делает Smarty очень масштабируемым для больших приложений и веб-сайтов с большим трафиком… и если это не имеет для вас никакого смысла, просто примите во внимание, что Smarty работает очень быстро и будет хорошо работать в условиях стресса и большого трафика!
Шаблонный движок Smarty имеет несколько других замечательных функций помимо компиляции шаблонов, и мы обсудим их чуть позже. Но сначала давайте рассмотрим компиляцию шаблонов …
Компиляция шаблонов объяснила
Что означает «компиляция шаблонов»? Какое отношение имеют веб-страницы к компиляции? Разве компиляция не то, что делают программисты на C ++ и Java? Да, но это другой тип компиляции.
Smarty анализирует ваши шаблоны и создает из них PHP-скрипты (а не двоичные файлы, как в общем программировании). Затем, когда ваша веб-страница просматривается, Smarty читает из этих сценариев PHP вместо извлечения самих шаблонов, что избавляет от необходимости повторного анализа шаблонов. Smarty также хорошо знает, когда нужно компилировать: он перекомпилирует ваши шаблоны только тогда, когда вы вносите в них изменения, поэтому вам не нужно беспокоиться о ручной компиляции шаблонов (это похоже на JSP, если вы знаете о как это устроено).
Хорошая вещь в этом заключается в том, что вам даже не нужно знать, есть ли сценарии PHP, и как работает компиляция. Все это скрыто от глаз, поэтому, если вы используете дизайнеров шаблонов для работы над вашими шаблонами, им (или вам, если вы разрабатываете свои собственные шаблоны) не нужно знать, что Smarty — это «механизм компиляции шаблонов».
Кэширование
Smarty также имеет встроенное кэширование выходных данных вашего шаблона. Smarty кэширует выходные данные содержимого шаблона, сохраняя накладные расходы, связанные с извлечением ваших данных из источника данных. Этот источник данных обычно является внешним и медленным, и часто является узким местом в вашем приложении, например, удаленной базой данных. Smarty кэширует выходные данные вашего шаблона с этими данными из вашего источника данных и избавляет вас от необходимости подключаться к базе данных при каждом доступе к вашей веб-странице. Если у вас медленно реагирующий сервер базы данных или вы делаете несколько запросов к базе данных, эта функция кэширования значительно повысит производительность и скорость отклика ваших веб-страниц.
Конечно, бывают случаи, когда вы на самом деле не хотите, чтобы вывод вашего шаблона кэшировался, например, биржевой тикер или ситуация, когда вы постоянно вносите изменения в базу данных, которые должны быть немедленно отражены на ваших веб-страницах. Нет проблем! Smarty снова достаточно умен, чтобы позволить вам указать, что следует или не следует кэшировать.
Фактически, вы можете кэшировать и не кэшировать фрагменты на одной странице шаблона, так как Smarty позволяет вам точно указать, что вы не хотите кэшировать (например, этот тикер внизу страницы) и что вы хотите, чтобы кэшировали (например, панель навигации, которая редко изменяется). Вы также можете установить время истечения срока действия кэша, чтобы выходные данные шаблона кэшировались только в течение определенного промежутка времени. Таким образом, вы можете достичь среднего уровня между наличием современного динамического контента и быстрой загрузки веб-страниц.
Один момент, на который следует обратить внимание (и на который авторы Smarty быстро указывают), заключается в том, что эта функция кэширования полностью отличается от Zend Cache, PHP Accelerator и тому подобного. Инструменты кэширования, такие как PHP Accelerator, кэшируют исполняемый байт-код ваших PHP-скриптов, тогда как Smarty кэширует выходные данные ваших шаблонов. Таким образом, Smarty может работать рука об руку с Zend Cache, где Zend Cache будет кэшировать сценарии PHP, которые Smarty создает из ваших шаблонов. Это обеспечивает отличную производительность, о чем свидетельствуют результаты тестов . Цитирую авторов:
«Производительность Smarty _really_ превосходит в сочетании с ускорителем PHP».
Модификаторы переменных
Smarty также предоставляет модификаторы переменных, которые, как следует из названия, позволяют вам изменять содержимое переменной. Вы можете делать такие вещи, как строчные буквы в верхнем регистре (например, {$title|upper}
$title
{$content|truncate:30}
$content
...
{$article|regex_replace:"/bad word/":"***"}
bad word
$article
***
Модификаторы переменных дают вашим дизайнерам шаблонов возможность изменять переменные шаблона, не путаясь с этими забавными персонажами, которые так любят использовать программисты. Этот продезинфицированный метод «программирования» дает вашим дизайнерам шаблонов больший контроль над форматированием вашей переменной шаблона, хотя они должны знать доступные им модификаторы переменных. Это, без сомнения, полезная функция, поскольку синтаксис остается простым и доступен даже для непрограммистов.
Функции шаблона
Smarty предоставляет встроенные и настраиваемые функции для использования в ваших шаблонах. Эти функции похожи на API шаблонов Smarty, за исключением того, что пользовательские функции могут быть изменены, но не встроенные функции. Функции позволяют вам делать такие вещи, как условный вывод программы (используя операторы if
foreach
section
Это особенно полезно для тех из нас, кто генерирует веб-страницы с контентом из баз данных — это циклические функции (section и foreach), которые можно использовать для зацикливания и отображения набора результатов.
фильтры
Smarty позволяет вам задавать (на самом деле « register
load
Префильтры — это функции, через которые проходят ваши шаблоны до их компиляции; постфильтры после; и выходные фильтры, после вывода шаблона по запросу.
‘Почему фильтры?’ ты говоришь. Предварительные фильтры позволяют вам выполнять такие действия, как удаление нежелательных комментариев (например, созданных Dreamweaver), и следить за тем, чтобы содержимое нежелательных шаблонов не передавалось компилятору. Постфильтры позволяют добавлять дополнительную информацию к вашим шаблонам, такую как дата создания шаблона (в виде комментария) после их компиляции. Выходные фильтры дают вам возможность изменять выходные данные шаблона, позволяя вам делать такие вещи, как обфусцирование адресов электронной почты на вашей веб-странице для защиты от спам-ботов (используя preg_replace()
Файлы конфигурации
Файлы конфигурации — это файлы конфигурации, в которых вы можете хранить глобальные переменные шаблона. Это позволяет хранить переменные, которые должны влиять на каждый шаблон (то есть глобальные переменные), в центральном месте. Хорошим примером такой переменной будет цветовая схема для ваших шаблонов. Ваши дизайнеры шаблонов должны изменить значения в файле конфигурации только в случае необходимости изменения цветовой схемы. Это избавляет их от мучительной альтернативы прохождения каждого отдельного шаблона для изменения цвета.
Файлы конфигурации также допускают разделы, которые мало чем отличаются от файлов .ini. Названия разделов заключены в квадратные скобки (например, [welcome_page]
Все, чего нет в разделе, доступно глобально (после вызова функции config_load
Плагины
Архитектура плагинов Smarty была введена в версии 2.0 и позволяет настраивать Smarty в соответствии с вашими целями (какими бы грандиозными или гнусными они ни были). Префильтры, постфильтры и выходные фильтры, которые я обсуждал ранее, являются лишь некоторыми из типов плагинов, доступных для настройщика. Другими типами подключаемых модулей являются типы модификаторов, блоков, компиляторов, ресурсов и вставок.
С помощью плагинов вы можете создавать свои собственные функции шаблонов, модификаторы переменных и фильтры. Вы даже можете изменить источник данных, из которого вы хотите, чтобы Smarty считывал (по умолчанию это простые файлы), используя плагин ресурса. С помощью плагина ресурсов вы можете сохранять свои шаблоны в базе данных и извлекать их, используя сокеты (или любой другой метод, который вы используете для доступа к шаблонам с помощью PHP. Это означает, что вы можете получить доступ практически к любому источнику).
Вывод
Smarty — это качественный шаблонизатор, который стоит обязательно рассмотреть, если вы ищете версию PHP.
Комбинируйте компиляцию шаблонов Smarty и присущий PHP эффект в создании веб-страниц, и вы станете победителем в скоростной гонке. Smarty также предлагает расширенные функциональные возможности, включая функции шаблонов и переменные модификаторы, которые могут быть расширены с помощью хорошо разработанной архитектуры подключаемых модулей.
Вся эта скорость и функциональность не достигаются ценой удобства использования: кривая обучения не круче, чем у других шаблонизаторов. Smarty также дополняется отличной документацией, которая доступна онлайн и доступна для загрузки на веб-сайте Smarty .
Андрей Змиевский, один из авторов, также работает в команде разработчиков PHP и тесно связывает разработку Smarty с PHP. Таким образом, вы можете быть уверены, что последние изменения в PHP (например, недавняя проблема register_globals в PHP 4.2.0) будут поддерживаться Smarty.