Вы находитесь здесь: Главная > Программирование > Выбор систем управления шаблонами

Выбор систем управления шаблонами

. . . . .

internetЧто касается систем управления шаблонами, то их выбор не ограничивается Smarty. У большинства PHP-разработчиков есть свое мнение о том, какой системой пользоваться. К системе Smarty обычно выдвигается ряд претензий.

■   Код Smarty имеет немалый объем (примерно 150 Кбайт кода в файлах Smarty .class .php и Smarty_Compiler. class . php, вместе взятых); его вы­полнение отнимает немало времени, учитывая необходимость обрабатывать каждый запрос к веб-сайту.

■   Непонятно, зачем нужно использовать еще один метаязык для вывода кон­тента, когда РНР создан для тех же самых операций.

Конечно, эти претензии небезосновательны. Рассмотрим каждую из них по по­рядку и наметим пути выхода из положения.

Оптимизация быстродействия Smarty

Прежде всего следует отметить, что дополнительная нагрузка на сервер, созда­ваемая присутствием кода Smarty, совершенно незаметна — разве что если сайт с очень высоким трафиком размещен на очень медленном сервере. И тем не менее всегда полезно проанализировать, как можно оптимизировать быстродействие то­го или иного веб-сайта или приложения.

Система Smarty компилирует шаблоны в код РНР при каждом их изменении. Когда разработка веб-сайта закончена, шаблоны, как правило, больше модифици­ровать нет нужды, поэтому и перекомпиляция их не выполняется. Вследствие этого не загружается класс Smarty_Compiler. class .php и объем кода, подлежащего синтаксическому анализу, уменьшается примерно до 90 Кбайт.

Кроме того, всегда можно воспользоваться ускорителями кода (например, АРС или РНР Accelerator) для снижения дополнительной нагрузки на сервер от загрузки Smarty. К тому же можно кэшировать сгенерированные веб-страницы — либо средствами Smarty, либо с помощью Zend Cache.

Примечание

Пакет Alternative РНР Cache (АРС) можно скачать бесплатно и легко установить с помощью установочной программы PECL. Он используется для кэширования и оптимизации кода РНР на веб-сервере, улучшая тем самым его быстродействие. Если вы работаете в операционной системе Linux, введите peel install в командной строке, добавьте строку extension="apc.so" в файл php.ini и перезапустите веб­сервер. Проверьте сообщения функции phpinf о (), чтобы убедиться в правильности установки.

Использование метаязыка для шаблонов

В шаблонах вполне допускается непосредственно использовать код РНР — в этом нет ничего страшного. Но бывает полезно вместо этого писать шаблоны на некотором метаязыке. Ниже описаны некоторые преимущества шаблонов Smarty над собственно кодом РНР.

■ Более короткий и удобочитаемый код; например, использование выражения {$foo} для вывода значения переменной $foo значительно нагляднее, чем <?php echo $foo> или <?= $foo ?>.

■   В системе Smarty имеются встроенные средства безопасности, которые оп­ределяют (если их активизировать), что можно и что нельзя делать в шабло­не. Другими словами, доступ к обычным функциям РНР можно существенно ограничить. Строго говоря, использование операций РНР в шаблонах может привести к выполнению в них нежелательных действий (например, записи в файл или отправке почты). Возьмем для примера систему управления кон­тентом (content management system— CMS). Кроме возможности изменять содержимое веб-сайта, такая система обычно позволяет пользователям мо­дифицировать и шаблоны сайта. В ситуациях такого рода, особенно когда присутствует присланный пользователями контент, возможность разрешать и запрещать те или иные операции в шаблонах — огромное преимущество.

■   Создавать шаблоны достаточно легко для непрограммистов. Например, веб- дизайнеру. который в основном работает с HTML и CSS, легче привыкнуть к Smarty, чем к РНР.

■   Средствами Smarty можно гибко манипулировать, добиваясь потрясающих эффектов. Самый очевидный пример— использование модификаторов. Еще одно мощное средство (которым часто по недосмотру пренебрегают) — это создание собственных блоков. Например, можно самому определить Smarty-блок roundedbox для вывода контента в рамке со скругленными уг­лами. Хотя браузер Firefox позволяет сделать это через CSS (с помощью се­лектора -moz-border-radius), в Internet Explorer эта возможность не реали­зована (параметр border-radius определен в спецификации CSS3, но еще не реализован в основных браузерах). В итоге в шаблоне можно будет использо­вать следующий код: {roundedbox} контент {/roundedbox}. Вычерчива­ние рамок со скругленными углами требует использования таблиц HTML или вложенных блоков div, если нет готовой реализации bCSS. А с помощью блока roundedbox подробности реализации можно будет скрыть.

Конечно, было бы несправедливо не упомянуть о недостатках использования метаязыка в шаблонах. Использование шаблонов Smarty вместо кода РНР имеет свои слабые места.

■   Синтаксический анализ и компиляция шаблонов в код РНР создает дополни­тельную вычислительную нагрузку. Правда, следует заметить, что это дела­ется только при модификации шаблона, поэтому в долгосрочной перспекти­ве такая нагрузка в среднем близка к нулю.

■   Пользователям приходится дополнительно изучать еще один язык, и хотя в Smarty многие вещи реализованы очень удачно, имеются и недостатки. Например, если нужно вывести массив в таблице из трех столбцов, в конце концов получается нагромождение тегов {assign}, {math} и {section}. Од­нако всегда можно добавить встроенную функцию или вынести все это на­громождение в отдельный шаблон.

Собственно говоря, библиотека Zend Framework предоставляет также и средст­ва управления шаблонами на основе РНР. Ранее в этой главе мы рассматривали компонент Zend_Controller (ту часть модели MVC, которая отвечает за контрол­лер). Но есть и компонент Zend View, который отвечает за представление. Этот компонент работает аналогично Smarty, с тем исключением, что используемые им шаблоны написаны на РНР. Если хотите пойти этим путем, вам придется внести соответствующие изменения в созданные шаблоны.

. . . . .
  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS

Оставить комментарий

This blog is kept spam free by WP-SpamFree.

. . . . . . . . . . . . . . . . . . . .