Почему я должен использовать систему шаблонов в 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 ]

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

Да, как вы сказали, если вы не заставляете себя использовать шаблонизатор внутри PHP (шаблонизатор), становится легко ускользнуть и перестать разделять проблемы.

Однако , те же самые люди, у которых есть проблемы с разделением задач, заканчивают тем, что генерируют HTML и подают его в Smarty или выполняют код PHP в Smarty, поэтому Smarty вряд ли решит вашу проблему разделения интересов.

Смотри также:

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

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

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

Кроме того, разделив страницу на отдельные файлы, и программист, и дизайнер могут работать с одной и той же «страницей» одновременно, возвращаясь к системе управления версиями по мере необходимости, без конфликтов. Дизайнеры могут тестировать визуальные элементы своих шаблонов в сравнении со стабильной версией кода, в то время как программист вносит другие, потенциально разрушительные изменения, в свою собственную копию. Но если эти люди редактировали один и тот же файл и должны были объединить разные изменения, вы можете столкнуться с проблемами.

Это также способствует внедрению хорошей практики программирования, позволяющей отделить бизнес-логику от логики представления. Если вы смешаете свою бизнес-логику с презентацией, вам будет сложнее извлечь ее, если вам потребуется представить ее позже. В наши дни все большую популярность приобретают различные способы представления в веб-приложениях: каналы RSS / ATOM, ответы JSON или AJAX, WML для портативных устройств и т. Д. При использовании системы шаблонов это часто можно сделать полностью с помощью шаблона, без каких-либо изменений или с небольшими изменениями. остальное.

Однако не все будут нуждаться или ценить эти преимущества. Преимущество PHP над Java / Python / Ruby / etc заключается в том, что вы можете быстро взламывать веб-страницы с некоторой логикой, и это все хорошо.

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

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

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

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

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

Есть все еще веская причина для использования системы шаблонов, но не Smarty, а PHPTAL . Шаблоны PHPTAL являются действительными файлами XML (и, следовательно, XHTML). Вы можете далее использовать фиктивный контент в PHPTAL и получить действительный XHTML-файл с окончательным видом, который можно обрабатывать и тестировать стандартными инструментами. Вот небольшой пример:

<table>
  <thead>
    <tr>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Age</th>
    </tr>
  </thead>
  <tbody>
    <tr tal:repeat="users user">
      <td tal:content="user/first_name">Max</td>
      <td tal:content="user/last_name">Mustermann</td>
      <td tal:content="user/age">29</td>
    </tr>
  </tbody>
</table>

Шаблонный движок PHPTAL автоматически вставит все значения из массива пользователей и заменит наши фиктивные значения. Тем не менее, в таблице уже действует XHTML, который может отображаться в любом браузере.

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

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

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

flickr в настоящее время использует smarty. не должно быть так плохо, не так ли?

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

PHP - это система шаблонов. Главное - заставить себя отделить логику от презентации самостоятельно. Использование Smarty или чего-то подобного лишь делает смешивание логики и представления чуть более неудобным. Если вы не можете разделить их самостоятельно, использование системы шаблонов не поможет. Все, что он собирается сделать, это съесть дополнительную вычислительную мощность.

Ключ в том, чтобы не изменять какие-либо значения в коде презентации. Для этого я думаю, что сам PHP так же эффективен, как и Smarty, если вы используете синтаксис if / endif:

<?php if($some_test): ?>
   <em>Some text!</em>
<?php endif; ?>
4 голосов
/ 12 января 2009

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

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

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

if (loggedIn)
{
    // print lots of HTML here
}
else
{
    // print error message
}

В Smarty это может быть что-то вроде этого (простите мой, вероятно, неправильный синтаксис, это было давно):

if (loggedIn)
{
    $smarty->bind("info", someObject);
    $smarty->display("info.template");
}
else
    $smarty->display("error.template");

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

2 голосов
/ 18 января 2009

Вы забыли htmlspecialchars() дважды. Вот почему вам нужна система шаблонов.

Умница бедна. Не судите о шаблонных системах, основанных на этом.

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

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

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

...