Статьи

Шаблонный подход HYSOCAMTT

Эта статья направлена ​​на то, чтобы выделить подход, который позволяет отделить все от бизнес-логики до логики проектирования, от XHTML от CSS, от Javascript от структуры страницы и т. Д., И в то же время он может быть ленивым и включать, например, информация CSS в том же документе (шаблоне), что и XHTML. Сценарий также может быть использован для более продвинутых функций, связанных с XML, о которых я не буду здесь говорить. Эта статья предполагает некоторое знакомство со Smarty или хотя бы концепцию шаблонов.

Автор: Бретт Замир

Сначала быстрый отказ от ответственности: хотя обсуждение вращается вокруг этого класса расширения Smarty с открытым исходным кодом (называемого SmartyDocB , с документацией ), этот подход может быть применен к шаблонам, основанным на других специфичных для PHP системах шаблонов, в XSL и т. Д. Однако я не У меня не так много времени, чтобы поддерживать код для того, что я опишу ниже (хотя я с радостью постараюсь ответить на вопросы, если смогу), но я чувствую, что сам код является достаточно зрелым, и если ничего другого, то его подход к шаблонам, возможно, уникален, поэтому в случае, если он может быть полезен для других, я обращаю на это ваше внимание. Возможно, если есть интерес, я смогу вернуться к коду позже.

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

Почему и как использовать этот шаблонный подход
Введение в подход HYSOCAMTT «разделяй озабоченность и смешивай их»)

Я не знаю как вы, но когда все предлагают внешние таблицы стилей над тегом <style>, а W3C устарел даже для атрибута @style (который сам по себе включал устаревшие теги HTML, используемые для форматирования), я был несчастный. Не потому, что я не видел мудрости отделять структуру от стиля — но потому, что это означало, что я больше не мог быть ленивым — или фактически чем-то, что часто эквивалентно — я не мог быть таким же эффективным. Я должен был бы на самом деле открыть другой файл, потерять концентрацию (моя кратковременная память плачевна), дублировать работу, найдя некоторые средства ссылки на структурный тег, чтобы можно было применить к нему информацию внешнего стиля, и затем надеяться что, глядя на структурный код в будущем без стилизации подсказок, я смогу узнать по именам своих классов,на какую часть страницы ссылался структурный код.

Например, в то время как в простом HTML старого стиля, чтобы сделать небольшой абзац, я мог бы обойтись с помощью:

<p><small>This website is run by an individual......</small></p>

Для обработки разделения стилей мне нужно:

  1. Начните с: <p> Этим веб-сайтом управляет человек …… </ p>
  2. Добавьте класс или идентификатор (для ссылок), чтобы я не делал все свои абзацы небольшими и, в соответствии с хорошей практикой, придумал семантическое, а не стилизованное имя: <p class = «disclaimer»> Этот веб-сайт управляемый человеком … </ p>
  3. Затем откройте и сохраните новый файл таблицы стилей, учитывая хорошее расположение файла, чтобы перемещение содержимого файла не нарушало связь, а затем добавьте соответствующий <link> (или <? Xml-stylesheet …?> если бы только IE начал поддерживать его) в заголовке моего документа XHTML, чтобы вернуться к таблице стилей.
  4. Добавьте объявление стиля, включая полное имя свойства (здесь «font-size»), в таблицу стилей: p.disclaimer {font-size: small;}
  5. Обновите мой XHTML, чтобы убедиться, что он работает.

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

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

Представьте себе, однако, если вы могли бы сделать следующее в вашем шаблоне:

    {moveto target=css}
p.disclaimer {font-size:small;}
{/moveto}

<p class="disclaimer">This website is run by an individual......</p>

И пусть скрипт извлекает содержимое «moveto» в отдельный файл для всего сайта (для всего сайта, потому что это ускоряет загрузку за счет использования преимуществ кэширования, которое происходит, когда браузер встречается с той же таблицей стилей при последующем посещении того же или другая страница сайта, которая включает его). Это именно то, что делает SmartyDocB. Кроме того, он поместит комментарии в файл CSS, которые указывают, из какого шаблона произошел вышеуказанный стиль. Таким образом, если вышеуказанный файл шаблона был назван, footer.tpl, в CSS-файле на стороне сайта (который может включать в себя другой автоматически сгенерированный или отредактированный вручную CSS-контент), то следующий текст будет добавлен вверху файла (вверху чтобы убедиться, что разработчик знал во время тестирования, что последующие (ранее существовавшие) стили не заменяли вновь добавленные:

    /* Begin moveto footer.tpl */
p.disclaimer {font-size:small;}
/* footer.tpl end moveto */

Еще более лаконичная опция в SmartyDocB — использовать специальный синтаксис, чтобы избежать дублирования (элемента и имени класса), представленного выше:

    <<p eclcss="font-size:small;">>This website is run by an individual......<</p>

Это будет извлекать информацию о стиле, которая будет добавлена ​​во внешний файл CSS (удаляя ее из полученного структурного вывода XHTML), и нацелена в соответствии с текущим элементом (‘e’) и его классом (‘cl’), таким образом «eclcss», тем самым воспроизводя тот же точный эффект, что и выше. Аналогичный атрибут существует для нацеливания на