Я обнаружил, что использование Smarty с PHP иногда требует дополнительного времени для
1) с использованием совершенно другого синтаксиса, чем сам PHP
2) необходимо проверить мелкие случаи, потому что документация не дает более тонких деталей, например, для «побега»,
http://www.smarty.net/manual/en/language.modifier.escape.php
он не говорит «побег»: «цитаты» предназначены только для двойных кавычек или для одинарных кавычек, поэтому вам нужно написать код для его проверки. Также для случая побега: «javascript» – не может точно сказать, что и как это ускользнуло.
3) для чего-то сложного, нужно написать вспомогательные функции или модификаторы, поэтому ему нужно создать новые файлы и снова сделать это на PHP.
кстати, использует ли Smarty хорошую скорость над использованием PHP? Благодарю.
Во-первых, PHP является языком шаблонов. Помните об этом, когда говорите об использовании системы шаблонов для ваших веб-приложений на основе PHP.
Единственный «реальный» аргумент, который я когда-либо слышал для использования ANY templating engine, заключался в том, что они предоставляют более простой язык для манипулирования шаблонами, что может быть удобно, если у вас есть дизайнеры шаблонов, которые не знают PHP и кому не доверяют научитесь правильно использовать PHP.
Что касается этих аргументов, я бы сказал, что если ваши дизайнеры шаблонов не обладают достаточной квалификацией PHP для разработки шаблонов, вероятно, вам стоит подумать о поиске новых дизайнеров шаблонов. Кроме того, сам PHP предоставляет другой синтаксис для управляющих операторов, которые можно использовать в шаблоне в сравнении с кодом. Например:
<? foreach($array as $key => $val): ?> <?= $val ?> <? endforeach; ?>
VS:
<?php foreach($array as $key => $val) { echo $val; } ?>
Лично я считаю, что шаблоны двигателей появились в 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 в качестве языка шаблонов:
|escape
везде, где вы выводите данные в HTML. Есть один конкретный механизм шаблонов PHP, в который я влюбился, что устраняет все эти проблемы: PHPTAL .
Это еще что-то новое, что вам нужно изучить, и это зависит от вашего приложения, но я думаю, что проблемы с XSS и проблемы плохого формообразования делают его проблемой.
PHPTAL так же, как Smarty, компилируется один раз на PHP и кэшируется, поэтому производительность сопоставима с необработанным PHP.
Я могу настоятельно рекомендовать подход «шаблон» (mVc), но для этой задачи подходят как Smarty, так и простой PHP.
Насколько я знаю, Smarty – один из лучших движков шаблонов. Может быть, потребуется некоторое время, чтобы привыкнуть к этому. Но если вы не работаете над системой в одиночку, а количество файлов html и style огромно, это значительно ускоряет разработку.
Во время работы над моим последним проектом дизайн менялся несколько раз, но логика была такой же. Я думаю, это лучший пример, когда Smarty или любой другой механизм шаблонов помогает много.
Лично я использую Blitz для шаблонов. На сайте автор утверждает, что это самый быстрый механизм моделирования шаблонов и обеспечивает (смещенную?) Диаграмму по производительности между различными системами шаблонов для PHP. Я сам не использовал smarty, но это может дать вам некоторые намеки на его производительность.
Использование Smarty в качестве механизма шаблонов, вероятно, не будет таким же эффективным, как его не использовать, поскольку это дополнительный слой программного обеспечения, т. Е. Язык шаблонов поверх другого, или другого языка шаблонов. С другой стороны, если вы правильно используете функцию кэширования, вы можете реализовать общий прирост производительности.
Шаблоны Smarty предварительно скомпилированы перед выходом в браузер, что предполагает запись временных файлов на диск. Этот шаг наверняка наказывает производительность, по крайней мере, немного.
Если вы уверены в своей способности сохранить реализацию и презентацию отдельно, и не имеете реального интереса к кешированию на стороне сервера, вы, вероятно, должны просто использовать чистую php-шаблонизацию. Некоторые среды MVC, такие как Zend Framework, имеют собственные PHP-подобные системы шаблонов.
С другой стороны, smarty – это достойный способ обеспечить четкое разделение презентации от реализации, особенно там, где неясно, к чему принадлежит. Это может помочь дисциплинировать вас для обеспечения этого необходимого разделения.
Тем не менее, я использую Smarty в большинстве своих проектов PHP, так как он напоминает мне библиотеки тегов Java-сервера (JSTL), которые я очень, очень привык и люблю.
Использование Smarty или нет – это более или менее философская позиция.
Я использую его, хотя я не использую много функциональности. Используя его таким образом, шаблоны, как правило, очень просты. Передайте ассоциативный массив с параметрами, выполните итерацию через его компоненты и вставьте необходимые элементы на страницу результатов. Это держит шаблоны чистыми и (надеюсь) свободными от бизнес-логики.
Кроме того, расширение Smarty довольно просто.
В качестве примера я добавил параметр styles для fetch (), чтобы иметь fetchUsingStyle (). Это позволяет мне легко переключаться между различными макетами сайта.
Кроме того, мой fetchUsingStyle () ищет различные места для шаблона: сначала пытается найти текущий стиль. Если не найден, он пытается загрузить шаблон с использованием стиля по умолчанию. Наконец, он пытается найти чистый статический фиктивный файл, местозаполнитель для чего-то, что будет реализовано позже.
Попробуйте использовать Smarty с шаблоном MVC, например Codeigniter, лучше, чем основной PHP
Зачем использовать механизм шаблонов, когда вы можете просто использовать ваши html-файлы и вводить PHP-код там, где он вам нужен? вы можете сделать это с помощью Psttt! templating engine для php
полный исходный код здесь http://github.com/givanz/psttt