Независимо от того, что вы делаете в конечном итоге, убедитесь, что вы проверяете, что ваш вход еще не был искажен magic_quotes
или каким-то другим благонамеренным мусором, и, если необходимо, запустите его через stripslashes
или что-то еще, чтобы его дезинфицировать .
Да, как Вы сказали, если Вы не вынуждаете себя использовать механизм шаблонной обработки в PHP (механизм шаблонной обработки), становится легко подсунуть и прекратить разделять проблемы.
Однако , те же люди, у которых есть проблемы при разделении проблем, заканчивают тем, что генерировали HTML и подали его присяжному острослову или выполнили код PHP в Присяжном острослове, таким образом, едва решение Присяжного острослова разделительной проблемы беспокойства.
См. также:
Я держал бы пари, что, если язык шаблона PHP был так коэрцитивен, чтобы вынудить Вас использовать его, Вы не будете использовать его вообще. Способность 'выскочить' и сделать вещи Ваш путь, когда в проблеме один из attractives PHP.
я не говорю, что это - хорошая вещь, ни что код будет удобен в сопровождении, просто что в начальных соображениях, я не выбрал бы шаблонный язык, который заблокировал меня полностью.
Иначе, я соглашаюсь, что шаблонная обработка систем помогает Вам разделить работу между кодированием и дизайном и возможно разрешением разработчикам разработать и кодирование нам.
И давайте не забывать будущее. Веб-сайты стары почти минута, они публикуются. НЕОБХОДИМО будет обновить стиль в какой-то момент. Если Вы часто поддерживаете разделение времена, один только разработчик может завершить совершенно новый веб-сайт с тем же программированием на бэкэнде. Это допускает более быстрые и более дешевые модернизации, позволяя Вам только вовлечь программиста, если новая функциональность требуется.
Когда Вы пишете код для кого-то еще. Например, я был когда-то вовлечен в создание твердой платформы веб-приложений, которая должна быть настраиваема для наших клиентов. Один важный запрос был то, что клиент мог нанять разработчика для изменения шаблонов без необходимость быть в состоянии программировать. Еще более важный, он не мог бы быть , разрешил изменять код.
Присяжный острослов, например, позволяет реализовывать довольно твердые ограничения на то, что может сделать шаблон. В основном наше приложение отключило все кроме конструкций наиболее абсолютного кода и выбранного набора функций модификатора. Таким образом, у нас было два гола, которые подавались хорошо движком шаблонов: простота и безопасность .
Просто не забывают разделять логический и окончательный результат (представление). Это лучше выполняется с платформой шаблонной обработки. Но Вы не должны изучать что-то как Присяжный острослов.
у Многих людей здесь есть корректный ответ. Присяжный острослов не обрабатывает по шаблону в PHP. Отнюдь нет. Присяжный острослов там главным образом для тех, кто должен использовать разработчиков (т.е. непрограммисты), чтобы отредактировать и установить дисплей страниц. Если все, кто собирается изменять расположение Ваших страниц, могут программировать, можно пойти с большим количеством кода PHP, ориентированного, обработав систему по шаблону. Но Вы действительно должны иметь все свои готовые выходные данные и отправить его в шаблон. Если Вы позволяете каждой странице выбрать, обработать и отобразить содержание, необходимо будет осуществить рефакторинг его раньше тогда позже.
Я думаю, что более чистый синтаксис является вполне большой победой. Хотя может быть похожим только на несколько символов, но когда Вы делаете это каждый день, тогда каждый символ начинает рассчитывать.
И {$myvar|escape}
, по моему скромному мнению, вполне немного короче, чем <?php echo htmlspecialchars($myvar); ?>
. (Учет того факта, что <?=$foo?>
синтаксис только доступен, когда он особенно включен на конференции PHP)
Я не думаю, что необходимо использовать движок шаблонов. Вместо этого необходимо использовать что-то как Zend_View, который поощряет Вас делать отдельную логику от представления, но позволяет Вам создавать свой уровень представления в PHP.
Ваш анализ разумен. Я предполагаю:
Лично, я думаю, что они - больше стычки, чем они стоят. Особенно они не работают, если Вы хотите вручить шаблоны "разработчикам", так как инструменты WYSIWYG не знают, что сделать с ними.
Вы забыли htmlspecialchars()
дважды. Вот почему Вам нужна система шаблонной обработки.
Присяжный острослов беден. Не судите системы шаблонной обработки на основе этого.
Я - счастливое использование платформы MVC как воспламенитель кода. Я нахожу, что в 'представлениях' я склонен придерживаться кода php, который имеет отношение только к тому, как отображены значения. У меня есть библиотека функций форматирования, которые я могу использовать в представлениях для того эффекта. Одно из помещения воспламенителя кода должно избежать языка шаблонной обработки из-за способа, которым это может ограничить Вас и замедление понесенного.
я нахожу, что это лучше для разработчиков для изучения некоторого PHP, так, чтобы они могли достигнуть того, что они должны сделать, например, чередующий имена классов. Это также сделает их более полезными в долгосрочной перспективе, и это не огромный прыжок от одного синтаксиса до другого.
Мне нравится способность тривиально отобразить любой шаблон из любого файла PHP (и включать фрагменты шаблонов друг в друге для общих элементов как военно-морские панели). Например, предположите, что у Вас была страница, которая обычно печатает некоторую информацию, если Вы зарегистрированы или ошибка, если Вы не. С PHP Вы записали бы что-то как:
if (loggedIn)
{
// print lots of HTML here
}
else
{
// print error message
}
В Присяжном острослове, это могло быть что-то вроде этого (простите мой, вероятно, неправильный синтаксис, это было некоторое время):
if (loggedIn)
{
$smarty->bind("info", someObject);
$smarty->display("info.template");
}
else
$smarty->display("error.template");
, Если Вы были действительно умны, Вы могли бы даже отобразить шаблон страницы входа в систему вместо ошибочного шаблона, дополнительно с сообщением, объясняющим, почему пользователь закончил там. И если Вы пошли с техникой, поскольку я записал его и затем решил, что Вы хотели переключиться на отображение поля входа в систему, это - только однострочное изменение! Для меня это примерно не сохраняет разделение представления и логики, но о способности снова использовать общие элементы представления от многих мест.
Главным образом я думаю для предотвращения любой "небезопасной" логики бэкенда, которая будет применена в шаблонах. Так как большинство шаблонов времен вручено разработчикам, мы только хотим дать им замкнутое множество вещей, которые они могут сделать.
PHP в значительной степени система шаблонной обработки. Ключ должен вынудить себя разделить логику от представления самостоятельно. Используя Присяжного острослова или что-то как этот только делает его немного более неудобным для смешивания логики и представления. Если Вы не можете заставить себя разделить их самостоятельно, использование системы шаблонной обработки не собирается помогать. Все, что это собирается сделать, съедают дополнительную вычислительную мощность.
ключ не должен изменять значения в Вашем коде представления. Чтобы сделать это, я думаю, что сам PHP является столь же эффективным как Присяжный острослов при использовании if/endif синтаксиса:
<?php if($some_test): ?>
<em>Some text!</em>
<?php endif; ?>
для меня одна из больших функций шаблонных механизмов - то, что кэш разделяет свое прозрачное на уровни для Вас. Я использовал присяжного острослова давным-давно, и материал кэша делает жизнь легче. также дизайн присяжного острослова позволяет Вам использовать свою собственную функцию кэша. В моем случае я выбираю, если для некоторой страницы должен использовать кэш-память или диск для хранения шаблонного вывода.
в другой руке, если Ваш сайт имеет большой трафик и Вы не знаете, как управлять присяжным острословом и настройкой ее хорошо, этот любой движок шаблонов мог быть уничтожителем сайта. но даже не используя присяжного острослова Ваш сайт может умереть также.
flickr в настоящее время использует присяжного острослова. не должно быть настолько плохим, не?
Существует все еще серьезное основание для шаблонной системы для использования, однако не Присяжный острослов, но 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, который может быть отображен в браузере по Вашему выбору.
Используя шаблоны non-PHP с оправданием разделения логики не имеет смысла. Если разработчик не понимает то, что разделение логики бизнес-представления и как оно должно быть сделано, то проблема должна быть решена соответственно. Иначе Вы заканчиваете с HTML в бизнес-логике или бизнес-логике в шаблонах - никакой механизм шаблонной обработки не собирается сохранить Вас. Необходимо преподавать разработчику основы.
И если разработчик делает , понимают, что, система шаблонной обработки является только ограничением. Это не добавляет никакое значение к процессу разработки, только наверху изучения нового синтаксиса, держа в курсе другую библиотеку и более медленное выполнение. В то время как последний может быть решен с кэшированием и этажеркой, это только исправляет проблему, которая иначе не существовала бы. Так, шаблонная обработка систем не предлагает значения, никакое преимущество вообще.
существует одно исключение, тем не менее, где я думаю с помощью non-PHP, шаблонная обработка системы разумна: когда у логических представлением программистов должен быть ограниченный доступ к шаблонам. Например, если Вы - поставщик для системы блог-хостинга, и Вы хотите позволить Вашим пользователям персонализировать и кодировать свои шаблоны, не позволяя им выполнить произвольный код. Этот аргумент, однако, делает не , относятся к случаям, где разработчик готов изучить немного кода для помощи программированию UI. Если он может изучить Присяжного острослова, он может , конечно , изучают PHP.
Главная причина люди используют шаблонные системы, состоит в том, чтобы разделить логику от представления. Существует несколько преимуществ, которые прибывают из этого.
Во-первых, можно вручить от шаблона веб-дизайнеру, который может переместить вещи, как они считают целесообразным без них имеющий необходимость волноваться о хранении потока кода. Они не должны понимать PHP, только для знания для оставления специальных тегов в покое. Им, вероятно, придется изучить некоторых простая семантика для нескольких тегов, но это намного более просто, чем изучение целого языка.
кроме того, путем разделения страницы на отдельные файлы, и программист и разработчик могут работать на той же 'странице' сразу, регистрируясь к управлению исходным кодом, как им нужно без конфликтов. Разработчики могут протестировать свой шаблонный зрительный ряд против стабильной версии кода, в то время как программист вносит другой, потенциально повреждая изменения, против их собственной копии. Но если эти люди и редактировали тот же файл и должны были объединиться в различных изменениях, можно встретиться с проблемами.
Это также осуществляет хорошую практику программирования в держащейся отдельно бизнес-логике от логики представления. При помещении бизнес-логики, смешанной в с представлением тогда, Вам больше тяжело извлекать его, если необходимо представить его по-другому позже. Различные режимы представления в веб-приложениях все больше популярны в эти дни: RSS/Atom-ленты, JSON или ответы Ajax, WML для карманных устройств, и т.д. С шаблонной системой они могут часто делаться полностью с шаблоном и минимальным изменением в чем-либо еще.
Не все будут нуждаться или ценить эти преимущества как бы то ни было. Преимущество PHP перед Java/Python/Ruby/и т.д. состоит в том, что можно быстро изрубить веб-страницы с некоторой логикой в них, и это - все хорошо и хороший.
Одним преимуществом движка шаблонов, которое я не видел, была возможность динамических элементов HTML - что-то как средства управления asp.net. Например, с Шаблоном HTML ГРУШИ Flexy у Вас могут быть динамические элементы формы, которые автоматически поддерживают состояние. Регулярный элемент выбора HTML может быть заполнен и устанавливать выбранный пункт в коде позади без циклов или условных выражений в шаблоне.
Лично я всегда использую шаблонизаторы на php, python или любом другом языке.
Первая очевидная причина, уже упомянутая другими:
Это заставляет вас не использовать никакой бизнес-логики в ваших шаблонах.
Да, конечно, дисциплина подойдет, когда она у вас есть.
Но это лишь небольшой аспект того, зачем использовать шаблонизатор. Большинство из них - это нечто большее, чем просто движок, и их можно считать шаблонизаторами, нравится вам это или нет.
Например, Smarty также имеет расширенные возможности кэширования, такие как частичное кэширование. Действительно полезные вещи, которые вам пришлось бы делать самостоятельно при использовании только php в качестве языка шаблонов.
И, пожалуйста, не забывайте обо всех этих действительно полезных вспомогательных функциях, которые можно просто найти в документации. Большинство из них также предоставляют простой способ подключить ваши собственные функции и/или набор инструментов.
Так что да, это вопрос выбора. Если вам нужен действительно простой шаблонизатор, проявите некоторую дисциплину и держите свою логику вне шаблонов. Но когда вы ожидаете, что ваше приложение будет расти, вам в конце концов понадобятся возможности шаблонизатора. И к тому времени вы, надеюсь, не будете изобретать колесо, кодируя все это самостоятельно.
И последнее, но не менее важное: для меня есть одна убийственная функция, доступная в некоторых фреймворках шаблонов.
Наследование шаблонов
Я познакомился с ней в Django и сейчас использую ее в последней версии Smarty 3. У ребят из фреймворка Symphony также есть Twig, который можно считать портом с синтаксисом Django.
Поначалу он выглядит немного странно, но является чрезвычайно мощным. Вы создаете свой скелет и определяете различные блоки. Вы можете расширять этот скелет и заполнять (переопределять) блоки своим содержимым.
Для меня это просто находка!