Когда использовать PHP шаблонизаторы - PullRequest
23 голосов
/ 04 мая 2011

Я создаю веб-сайт на php с большим количеством страниц, и мы - команда из 9 человек, работающая над этим.Так что просто хочу изучить это, когда мы должны использовать PHP шаблонизаторы, а когда нет.Поэтому меня интересуют плюсы и минусы использования шаблонизаторов PHP, чтобы я мог принять решение, использовать ли его в моем случае или нет.

Ответы [ 10 ]

36 голосов
/ 04 мая 2011

PHP - это язык шаблонов.

По моему опыту, связанному с различными системами шаблонов, вывод был довольно прост: не используйте .

Вместо этого пишите PHPкак и должно быть написано!Никогда не делайте ничего внутри .html, кроме echo и for / foreach.Если вы напишите код, основанный на шаблоне проектирования, таком как MVC, это станет еще более очевидным: просто echo и foreach внутри и объясните им, что им никогда не следует связываться с кодом внутри <?php и ?>.

Это сработало для меня с тех пор.Мне, как правило, было сложнее объяснить их, Smarty, чем объяснить, чтобы никогда не связываться с php.

Системы шаблонов также увеличивают вес вашего сервера (иногда это немного, иногда вы можете это почувствовать).Поначалу это может показаться чрезмерной оптимизацией, но я предпочитаю, чтобы она была настолько простой, насколько это возможно.

Примечание:

Smarty, например, равно HARDER для обнаружения в файле .html, потому что единственный известный мне синтаксический подсветчик Smarty - это плагин NetBeans, и он довольно бета.PHP, с другой стороны, имеет синтаксис, выделенный в любом приличном редакторе.Кроме того, веб-интерфейсам легче распознавать и не связываться с ними.

Заключение

Минусы (для использования системы шаблонов)

  • Увеличивает нагрузку на сервер (легче или тяжелее,не имеет значения - вы можете видеть это)
  • Внедряет дурную практику (логика заключена в синтаксис языка шаблонов)
  • Нет подсветки синтаксиса для синтаксиса языков шаблонов - труднее обнаружить (для кодера и внешнего интерфейса))
  • Время, потраченное на его изучение и обучение внешним интерфейсам
  • Труднее объяснить команде внешнего интерфейса (я несколько раз преподавал базовый PHP для внешних интерфейсов - в то время как многие другие уже могли писатьих собственный PHP "начального уровня"; я никогда не обучал интерфейс Smarty, чтобы они могли делать что-то кроме {$var})
  • Заставляет вас избегать проблемы REAL : логика и разделение представлений !
  • Добавляет дополнительный вес вашему проекту

Плюсы (для использования системы шаблонов)

  • Крайняя скукадопустимый аргумент)

Замена системы шаблонов

  • Разделение логики и представления (я бы предложил MVC для этой задачи и для ее плюсовдля других областей разработки: более легкое обслуживание, абстрактная база данных и т. д.)
  • Заставьте себя писать только в представлении echo, и повторение для вывода: foreach и for должны выполнить 99%итерационные потребности;Вы также можете использовать while и do while
11 голосов
/ 04 мая 2011

Для меня, когда я решаю, следует ли использовать отдельный шаблонизатор или просто использовать PHP для шаблонов, это всегда сводится к следующему:

Когда использовать шаблонизатор

Когда необходимо ограничить (изолированную программную среду) код, который можно запустить в шаблонах.

Когда не использовать шаблонный движок

Все остальное время.

5 голосов
/ 04 мая 2011

Пуристы PHP скажут вам, что PHP сам по себе является механизмом шаблонов.Я считаю себя пуристом в этом вопросе и рекомендую просто использовать PHP.Он даже имеет альтернативный синтаксис для блоков if и loop, которые в значительной степени разработаны для удобочитаемости стиля шаблона.

Однако некоторые люди все еще предпочитают использовать механизмы шаблонов, такие как Smarty.Есть несколько вещей, которые следует учитывать, если вы выберете этот маршрут:

Кто будет обслуживать шаблон? Если человек, обслуживающий шаблоны, уже знает PHP, нет смысла делать это.они изучают новый, псевдо-PHP шаблонизатор.Если они не знают PHP, то это все еще сомнительно, в зависимости от их фона, так как большинство шаблонизаторов просто реализуют синтаксис, не похожий на теги PHP (такие как <% %>)

Насколько сложным будет вашполучить шаблоны? Некоторые движки шаблонов крайне ограничены в том, что вы можете делать в шаблонах (вынуждая вас помещать все в контроллер, некоторые почти до бесполезности или ненужных прыжков с обручем), в то время как другие примерно такие же разрешающиекак необработанный PHP (который, как многие утверждают, отрицательно сказывается на назначении механизма шаблонов).

Насколько важны эффективность и скорость? Механизмы шаблонов увеличивают накладные расходы.Период.Преобразование пользовательских тегов в теги PHP требует ресурсов.Сколько они добавляют и насколько это важно, зависит от ряда факторов (включая сам двигатель).Если вам нужна более высокая скорость работы с вашим сайтом, я бы проголосовал за движок шаблонов одним из первых.

Как я уже сказал, я также рекомендую использовать PHP в качестве вашего "движка" шаблонов, но не забывайтенекоторых из подводных камней.Главным образом, добавить в ваши шаблоны больше логики, чем необходимо.Убедитесь, что у вас есть правило, включающее только блоки echo, for/foreach и базовые if (например, if is_admin() и т. П.), И убедитесь, что оно применяется принудительно.

3 голосов
/ 28 января 2014

Нет абсолютно никакой причины использовать шаблонный движок php. Разделение логики и взгляда является обязательным. Это НЕ означает использование шаблонизатора. С помощью движка шаблонов вы должны изучать вещи, которые не имеют ничего общего с php или чем-то еще. Каждый, кто должен изменить источники умного или другого шаблона, может быть раздражен этим дерьмом из ничего бесполезного и мешающего беспорядка. PHP усиливает ваши шаблоны и дает вам все возможности для каждого способа его использования. С дюжиной советов PHP достаточно безопасен. Не чувствуйте себя в безопасности, используя шаблонизатор без знания хитростей. Smarty не может защитить публичные редактируемые шаблоны.

Ищите Designpatterns. Просмотр Helper и MVC. Делать ваш код простым и хорошо структурированным означает быть умнее, чем smarty / any-template-engine ...

2 голосов
/ 20 декабря 2012

Механизм шаблонов следует использовать, когда существует большое количество презентаций, которые дублируются на нескольких веб-страницах, и у вас есть желание отделить бизнес и прикладное программирование и логику от презентации.

Преимуществами такого разделения являются:

  1. более узкая, более читаемая и безошибочная логика приложения
  2. изменение представления без изменения файлов базовой логики
  3. изменениединамическое представление во время выполнения

Хотя технически верно, что php сам является языком шаблонов, более точно описать его как язык веб-программирования со встроенными шаблонами.С другой стороны, также верно, что большинство шаблонизаторов используют шаблоны со встроенными директивами программирования. Это подразумевает, что существует разумный баланс между слишком большим количеством шаблонов в php и слишком большим количеством программирования в шаблоне.Чем лучше баланс, тем легче будет ваше кодирование, и тем более гибким и расширяемым будет ваше приложение.

Возьмите, например, код php, который извлекает ваши последние 10 сообщений в блоге и записывает их в тег DIV на вашем блоге, когдакод вызывается.Если этот же код был продублирован для создания RSS-канала, у вас был бы один и тот же код в двух местах, что требовало бы его сохранения в нескольких местах при изменении логики.

Если, скорее всего, один и тот же код вызывается под управлением механизма шаблонов, то у вас один и тот же код, записывающий в две разные формы вывода в зависимости от того, был ли предоставлен шаблон RSS / XML или HTML.Если механизм шаблонов написан хорошо, код php не знает и не заботится о том, какой тип шаблона ему предоставлен.С таким же успехом php может выводить HTML, XML, SQL, PDF или текст!

Со временем внедрив множество веб-сайтов в Classic ASP и PHP, я обнаружил, что хороший механизм шаблонов избавил меня от долгих часов программирования.и отладка, и потому что не было реального механизма шаблонов для Classic ASP, я написал KudzuASP для решения проблемы.Вы можете найти соответствующий проект KudzuPHP на моем сайте, и это бесплатно.На его основе также есть плагин для Wordpress.

2 голосов
/ 04 мая 2011

Я бы предложил использовать некоторый метод хорошего разделения между вашей логикой отображения и другой манипуляцией выборки данных. Реализация MVC - отличный способ сделать это, и большинство PHP-фреймворков предоставляют MVC-фреймворк.

Это позволяет каждому работать над гораздо более чистым кодом и позволяет шаблонам оставаться простыми, чтобы те, кто менее техничен (например, разработчики внешнего интерфейса), могли их редактировать.

1 голос
/ 04 мая 2011

Вы всегда должны использовать какой-то механизм для отделения разметки от кода, точно так же, как вы не должны встраивать CSS в ваш HTML. Есть слишком много вариантов, чтобы дать вам однозначный ответ. Существуют движки шаблонов, такие как smarty или fasttemplate, затем существуют фреймворки с системами шаблонов (например, торт, средство для зажигания кода и т. Д.). Вы должны оценить их индивидуально в зависимости от ваших потребностей

1 голос
/ 04 мая 2011

Я бы просто использовал php для вашего шаблонного движка. Никакой дополнительной перегрузки от наличия чего-то вроде умного. Им просто нужно знать базовый php. Вы можете обозначить файлы шаблона с расширением .phtml ... Почему вы хотите использовать шаблонизатор?


Просто чтобы прояснить, в шаблонных файлах .phtml должны быть только echos и foreachs, внутри не должно быть никакого кода ядра.

0 голосов
/ 24 ноября 2013

Действительно, разделение и повторное использование являются ключевыми словами здесь.

Лучший способ разработать и сегментировать рабочую нагрузку в команде - это когда веб-дизайнер (интегратор / html-ist и т. Д.) Не имеет возможности разбить программную часть (база данных, файлы, сеансы, синтаксис). ошибки и тд).

Я рекомендую использовать FigDice Template Engine , который обеспечивает очень четкое разделение между логикой (программа, база данных, файлы, алгоритмы и т. Д.) И презентацией (представления и информация, которую они представляют) в полной безопасности.

FigDice поддерживает, конечно, макросы (повторно используемые части файла), включение, итерации и многие другие функции, а также предоставляет эксклюзивный подход к разделению презентации / логики с инверсией управления поставщиками данных ( Представления извлекают информацию, необходимую для отображения, а не позволяют контроллерам помещать данные в шаблоны, как это обычно происходит практически с каждым механизмом шаблонов). Это позволяет конструктору HTML действительно решить, что он хочет представить, когда и как, без риска взлома кода.

Буду рад получить отзывы и комментарии. Спасибо

0 голосов
/ 22 декабря 2012

Вы пробовали Stamp Template Engine?

Это все еще увеличивает нагрузку на сервер; однако я думаю, что это исправляет другие недостатки шаблонных движков. В отличие от Smarty и всех других шаблонизаторов для PHP, StampTE полностью не логичен. Вы только помечаете регионы соответствующими HTML-комментариями (у большинства дизайнеров и внешних разработчиков эти маркеры уже есть только для удобства чтения). Он использует эти маркеры, чтобы предложить функциональность «вырезать и вставить» для внутренних разработчиков. Back-end PHP-программисты могут копировать и вставлять эти области из шаблона (например, бумажные модели) и создавать с его помощью графический интерфейс веб-сайта и веб-приложения. Кроме того, они имеют очень дружественный API. Например, чтобы вырезать область как:

   <!-- cut:siteMenu -->
       <nav>
          <ul>
            <li>...</li>
          </ul>
       </nav>
   <!-- /cut:siteMenu -->

Они могут использовать объектно-ориентированные обозначения:

$template->getSiteMenu()->setLink( ... ); etc..

Я думаю, что это действительно круто.

http://www.stampte.com

...