Почему я должен использовать систему шаблонов в PHP? - PullRequest
57 голосов
/ 12 января 2009

Почему я должен использовать систему шаблонов в PHP?

Причиной моего вопроса является то, что PHP сам по себе является многофункциональной системой шаблонов, зачем мне устанавливать другой шаблонизатор?

Единственные два профессионала, которых я нашел до сих пор:

  1. Немного более чистый синтаксис (иногда)
  2. Механизм шаблонов обычно недостаточно силен для реализации бизнес-логики, поэтому он заставляет вас разделять задачи. Использование шаблонов в PHP может соблазнить вас обойти принципы шаблонов и снова начать писать кодовый суп.

... и оба весьма незначительны по сравнению с минусами.

Маленький пример:

PHP

<h1><?=$title?></h1>
<ul>
  <? foreach ($items as $item) {?>
  <li><?=$item?></li>
  <? } ?>
</ul>

Smarty

<h1>{$title}</h1>
<ul>
  {foreach item=item from=$items}
  <li>{$item}</li>
  {/foreach}
</ul>

Я действительно не вижу никакой разницы.

Ответы [ 24 ]

1 голос
/ 12 января 2009
  • Вы хотите использовать файл с PHP-кодом в качестве шаблона? Хорошо.
  • Вы хотите использовать свои переменные в указанном шаблоне? Хорошо.

Просто не забудьте разделить логику и окончательный вывод (презентацию). Это лучше сделать с помощью шаблонов. Но вам не нужно учить что-то вроде Smarty.

  • Если вы используете Zend_View или аналогичный, вы можете использовать PHP-код полностью.

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

1 голос
/ 12 января 2009

Я думаю, что более чистый синтаксис - большая победа. Хотя это может выглядеть как всего несколько символов, но если вы делаете это каждый день, то каждый персонаж начинает считать.

И {$myvar|escape} ИМХО немного короче, чем <?php echo htmlspecialchars($myvar); ?>. (Помните, что синтаксис <?=$foo?> доступен только в том случае, если он специально включен в конф. PHP).

1 голос
/ 12 января 2009

Одним из преимуществ механизма шаблонов, которое я не видел, была возможность динамических элементов HTML - что-то вроде элементов управления asp.net. Например, в HTML-шаблоне PEAR Flexy вы можете иметь динамические элементы формы, которые автоматически поддерживают состояние. Обычный html-элемент select может быть заполнен, и выбранный элемент может быть установлен в коде без циклов или условных обозначений в шаблоне.

1 голос
/ 12 января 2009

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

1 голос
/ 12 января 2009

Ваш анализ обоснован. Я полагаю:

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

Лично я думаю, что они доставляют больше хлопот, чем стоят. Особенно они не работают, если вы хотите передать шаблоны для «дизайнеров», так как инструменты WYSIWYG не знают, что с ними делать.

1 голос
/ 20 января 2009

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

1 голос
/ 12 января 2009

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

Smarty, например, позволяет реализовать довольно жесткие ограничения на то, что может делать шаблон. По сути, наше приложение отключило все, кроме самых основных конструкций кода и выбранного набора функций модификаторов. Таким образом, у нас было две цели, которые хорошо выполнялись механизмом шаблонов: простота и безопасность .

1 голос
/ 27 ноября 2013

Некоторые могут возразить, что Smarty делает то, что уже может делать PHP: отделить представление от бизнес-логики. Язык программирования PHP отлично подходит для разработки кода, но в сочетании с HTML синтаксис операторов PHP может привести к путанице. Smarty восполняет это, изолируя PHP от презентации с помощью гораздо более простого синтаксиса на основе тегов. Теги показывают содержимое приложения, обеспечивая четкое отделение от кода PHP (приложения). Для управления шаблонами Smarty знание PHP не требуется.

Важность такого разделения носит ситуационный характер. Это обычно более важно для веб-дизайнеров, чем для разработчиков PHP. Поэтому Smarty обычно хорошо подходит, когда роли разработчиков и дизайнеров разделены. Нет правильного или неправильного ответа: у каждой команды разработчиков есть свои предпочтения по управлению кодом и шаблонами. Помимо чистого синтаксиса на основе тегов, Smarty также предлагает широкий спектр инструментов для управления представлением: детальное кэширование данных, наследование шаблонов и функциональная песочница. Бизнес-требования и код PHP, с которым используется Smarty, сыграют большую роль в определении того, подходит ли Smarty.

0 голосов
/ 12 августа 2015

Мне нравится использовать шаблоны по нескольким причинам:

1) Это очищает читабельность кода PHP. Мои PHP-файлы становятся раздутыми и неутешительными, когда везде есть операторы print ("") с кусками HTML. Кроме того, возникают проблемы, например, как передать переменные в текст HTML? Вы используете теги везде? Используете ли вы print (""), экранируете ли вы свои HTML-кавычки и объединяете ли вы переменные? Вы используете print ("") и используете одинарные кавычки в HTML, идущие вразрез со стандартом, и вставляете свои переменные напрямую?

2) Очищает представление HTML-кода. Может быть трудно поддерживать хороший внешний вид вашего сгенерированного HTML-кода, если он будет разрезан на несколько файлов. Например, ваш отступ может закончиться.

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

В целом, это просто лучший способ организовать все. Есть небольшой компромисс в необходимости изучения и ввода команд классов шаблонов, открытия нескольких файлов и т. Д. Но, на мой взгляд, я думаю, что это того стоит, поскольку читаемость и организация кода повышаются.

0 голосов
/ 17 марта 2014

Разработчики, которые будут активно использовать концепции ООП, такие как JAVA / Spring / Oracle PL-SQL, говорят, что сам язык PHP используется для логики представления / просмотра / отображения в проектах уровня предприятия , В этих БОЛЬШИХ проектах серверная часть - Oracle, база данных выбирается с использованием pl-slq / java, а презентация - php. Лучший пример - facebook. http://en.wikipedia.org/wiki/Facebook Facebook использует php для презентации, java / c ++ в качестве внутреннего интерфейса.

Единственная причина, по которой php используется в качестве презентации, потому что он работает в тесном контакте с HTML, но java / c ++ больше основан на ООП и не может быть приспособлен непосредственно к HTML. Подскажите одну CMS (joomla / drupal / wordpress) или фреймворк (zend / symfony / Yii), которая использует Smarty? Так ПОЧЕМУ умный нужен?

...