Язык шаблона против прямого PHP

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

{navigation: products} 

против

 foreach($cms_label['products'] as $product) { echo '<li class="product_nav">'. '<a href="products/{$product.id}">{$product.name}</a>'. "</li>\n"; } 

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

 <?php navigation('products'); ?> 

Что ты думаешь?

Имейте в виду, что мне не нужно делать что-то более сложное, чем включение страницы в определенное место или запись неупорядоченного списка; остальные должны обрабатываться CSS.

Solutions Collecting From Web of "Язык шаблона против прямого PHP"

Языки шаблонов для PHP являются примером анти-шаблона, называемого « Эффект внутренней платформы ». Smarty – пример шаблона для PHP, но даже Хасин Хайдер, автор книги по Smarty, говорит, что Smarty мертв, и больше не нужно его использовать.

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

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

Не записывайте PHP-функции для инкапсуляции блоков вывода HTML. Вместо этого используйте include() чтобы извлечь фрагменты HTML. Этот метод иногда называют «частичным».

Вы также можете использовать инфраструктуру MVC, такую ​​как Symfony, Kohana, Solar, CodeIgniter или Zend Framework, чтобы помочь вам сохранить дисциплину в отношении разделения кода шаблона PHP на остальной код вашего приложения.

Я был очень счастливым пользователем Smarty в течение долгого времени, я больше не верю в специализированные языки шаблонов.

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

Это довольно тривиально бросить вашу собственную небольшую систему шаблонов, которая использует php в шаблонах. Затем создайте разных помощников, чтобы ваш код шаблона был чистым (например, функция «navigation ()»).

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

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

Переосмыслить колесо в большинстве случаев плохая идея.

PHP уже является языком шаблонов. Вам не нужно реализовывать свои собственные.

Что касается Smarty, это самая полная система шаблонов для php, и это все еще плохая идея.

Несколько статей по теме:

  • Когда-то был Smarty! Хасином Хайдером. Он на самом деле написал книгу о умении, и он не рекомендует ее.

  • Php и Templates от Harry Fuecks (автор 1-го издания антропологии php)

Если вы хотите посмотреть на шаблоны, лучше посмотреть на:

  • phpSavant использует php-код и по-прежнему способствует разделению проблем.

Конечная цель, конечно, состоит в том, чтобы упростить кодекс, поддерживая разделение бизнес-логики и презентации

Возможно, вы захотите изучить Smarty-http://smarty.php.net Smarty – очень мощный механизм шаблонов, который дает вам лучшее из обоих миров. Он имеет обширную поддержку настраиваемых модулей и плагинов.

Я создал пользовательскую CMS с Smarty и PHP и ничего не могу сказать о ней.

PHP-код для использования Smarty выглядит следующим образом:

 <?php // my cms $smarty = new Smarty(); . . $smarty->display('home.tpl'); ?> 

Код шаблона выглядит примерно так:

 <h1>{$pagetitle}</h1> {insert tag="navigation"} 

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

Легко забыть htmlspecialchars () здесь или там, поэтому язык шаблонов, который предоставляет директивы типа {$ name}, должен удостовериться, что $ name автоматически передается через htmlspecialchars, с соответствующей кодировкой и всем.

Конечно, это также означает, что вы можете указать другой «контекст» для вывода переменной, например, alert («Привет {$ name | context = singlequotes}!»); где интерпретатор шаблонов избежал содержимого $ name, так что невозможно вырваться из одинарных кавычек, вместо того, чтобы сбрасывать XML (что должно быть по умолчанию).

Такие контексты также могут включать в себя такие вещи, как int (для принудительного числа), а также могут быть расширены, чтобы принимать дополнительные параметры для форматирования вывода и т. Д.

Мои 2 цента. Не уверен, есть ли решение с открытым исходным кодом, которое позволяет это (было бы интересно услышать об этом!), Я закатил собственный интерпретатор для этого материала на работе. Поскольку полученный «промежуточный код» является чистым PHP, его также можно легко «кэшировать» (например, Smarty и другие системы tpl).

Мне очень нравится Smarty, и я также считаю, что контроллеры должны быть чисто написаны в XML и моделях в YAML. Это единственный способ обеспечить соблюдение MVC.

Если вопрос о производительности возникает только тогда, то компиляция на php может рассматриваться как возможность (пусть и удаленная) с условием sine qua non, что это делается запутанным образом, чтобы препятствовать нетерпеливым разработчикам прочесть его.