Вопрос

Я обнаружил, что при использовании Smarty с PHP иногда требуется дополнительное время для

1) используя совершенно другой синтаксис, чем сам PHP
2) нужно проверять мелкие случаи, так как в документации не указаны более мелкие детали, например "побег"

http://www.smarty.net/manual/en/language.modifier.escape.php

здесь не указано escape: «кавычки» предназначены только для двойных кавычек или для одинарных кавычек, поэтому вам нужно написать код для его проверки.Также в случае escape: «javascript» — невозможно точно сказать, что и как экранируется.

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

кстати, дает ли использование Smarty хорошее ускорение по сравнению с использованием только PHP?Спасибо.

Это было полезно?

Решение

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

Единственный «реальный» аргумент в пользу использования ЛЮБОГО шаблонизатора, который я когда-либо слышал, заключался в том, что они предоставляют более простой язык для манипулирования шаблонами, что может быть удобно, если у вас есть дизайнеры шаблонов, которые не знают PHP и которым вы не доверяете. научитесь разумно использовать PHP.

Что касается этих аргументов, я бы сказал, что если ваши дизайнеры шаблонов недостаточно компетентны в изучении PHP для разработки шаблонов, вам, вероятно, следует подумать о поиске новых дизайнеров шаблонов.Кроме того, сам PHP предоставляет другой синтаксис для операторов управления, которые вы можете использовать в шаблоне, а не в коде.Например:

<? foreach($array as $key => $val): ?>
    <?= $val ?>
<? endforeach; ?>

ПРОТИВ:

<?php
    foreach($array as $key => $val) {
        echo $val;
    }

?>

Лично я считаю, что шаблонизаторы возникли в PHP потому, что:

  1. Так делают другие языки
  2. Лучшие программисты PHP поняли, что им нужен способ обеспечить разделение между логикой представления и приложения, и шаблоны были простым способом сделать это.

Первая причина просто глупая.Вторую причину можно преодолеть, проявив немного самообладания и даже элементарное понимание необходимости разделения слоев в приложении.Шаблон проектирования MVC — один из способов решения этой проблемы.Что касается проявления некоторого самоконтроля, мое правило состоит в том, что используются только необходимые циклы и операторы if, а также функции, которые фильтруют, экранируют и форматируют вывод для экрана.

Я широко использовал Smarty и могу честно сказать, что он всегда создавал для меня больше препятствий, чем решений.Во всяком случае, именно переход на шаблоны на основе PHP фактически сократил время разработки как шаблонов, так и кода.

Другие советы

Я не люблю шаблонизаторы.Я считаю, что они требуют больших потерь и требуют больших ресурсов для PHP.

В MediaWiki, начиная с версии 1.6.x, мы отказались от использования Smarty по умолчанию и просто использовали встроенные шаблоны PHP, что значительно улучшило производительность.

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

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

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

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

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

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

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

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

  • Новый синтаксис по-прежнему основан на старой концепции специальных тегов, вставляемых в случайные места документа.
  • Поскольку Smarty не понимает синтаксис/структуру HTML, он не может не помочь вам создать корректный/правильно сформированный HTML.Теги Smarty нарушают синтаксис HTML, поэтому после их добавления другие стандартные инструменты тоже не смогут вам помочь.
  • Вывод Smarty, как и в PHP, по умолчанию небезопасен (неэкранирован), и вы придется не забудьте добавить |escape везде, где вы выводите данные в HTML.

Мне очень понравился один шаблонизатор PHP, который решает все эти проблемы: PHPTAL.

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

PHPTAL, как и Smarty, компилируется один раз в PHP и кэшируется, поэтому производительность сравнима с необработанным PHP.

Плюсы

  • В ваших HTML-файлах нет PHP (позволяет идентифицировать как PHP, так и HTML)
  • Трубы {$var|default:"Ничего не выбрано"} {$var|urlencode}
  • В противном случае:{foreach item=row from=$results}{$row.name}<br>{foreachelse}Нет результатов{/foreach}
  • Веб-сайты/страницы с темами (использование только CSS имеет ограничения)

Минусы

  • Синтаксис другого языка
  • Не всегда очевидный код {"Г-м-д"|strftime:$timestamp} {$array|@var_dump}
  • Небольшие накладные расходы

Я настоятельно рекомендую «шаблонный» подход (mVc), но для этой задачи подходят как Smarty, так и простой PHP.

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

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

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

http://alexeyrybak.com/blitz/blitz_en.html

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

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

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

С другой стороны, smarty — это достойный способ обеспечить четкое разделение представления и реализации, особенно там, где неясно, что и где находится.Это может помочь вам дисциплинировать вас и обеспечить необходимое разделение.

Тем не менее, я использую Smarty в большинстве своих PHP-проектов, поскольку он напоминает мне библиотеки тегов Java-Server (JSTL), к которым я очень, очень привык и которые мне нравятся.

Использовать Smarty или нет – это более или менее философская позиция.

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

Кроме того, расширить Smarty довольно просто.

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

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

Попробуйте использовать Smarty с шаблоном MVC, например Codeigniter. Это лучше, чем основной PHP.

Зачем использовать шаблонизатор, если вы можете просто использовать HTML-файлы и вставлять PHP-код туда, где он вам нужен?вы можете сделать это с помощью Psttt!шаблонизатор для PHP

полный исходный код здесь http://github.com/givanz/psttt

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top