"Идеальный синтаксис" для верстальщика

Тема в разделе "Веб-дизайн", создана пользователем Mendel, 14 фев 2010.

Статус темы:
Закрыта.
Модераторы: zek24
  1. Mendel

    Mendel

    Регистр.:
    27 янв 2008
    Сообщения:
    217
    Симпатии:
    64
    Задача:
    Наиболее простой синтаксис шаблонизатора для верстальщика.
    Шаблонизатор должен позволять делать большинство дизайнерских трюков, должен быть простым и по возможности ограничивать возможности программисту переложить половину своих функций на код в шаблоне.
    Прошу высказать Ваши замечания/пожелания по синтаксису, пожелания новых "волшебных функций", другое оформление конструкций, другие слова в конструкциях (например я думаю что возможно лучше вместо {array=таблица} писать {table=таблица}:

    Основные понятия:
    Шаблонизатор предусматривает два основных файла - файл скина и файл шаблона страницы.
    Скин это общая для всех/многих страниц часть. Шаблон это зависимая от конкретной страницы часть дизайна. В идеале шаблоны значительно меньше изменяются при изменении дизайна.
    собственно шаблон вставляется в скин в месте отмеченном {BODY}.

    Все файлы шаболнов имеют расширение tpl.

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

    Имя скина по умолчанию равно template.tpl но может быть изменено программистом (например для использования отдельного скина для главной страницы).

    Все управляющие конструкции шаблонизатора заключены в фигурные скобки {}.

    Вывод переменных:
    Синтаксис переменных очень прост - {переменная} заменяется на значение переменной "переменная"
    Переменные внутри массивов (таблиц) выглядят аналогично: {массив.переменная}

    Условные операторы:
    Конструкция вида
    Код:
    {if=имя_переменной}
    тело
    {/if=имя_переменной}
    
    заменяется на "тело" если значение переменной "имя_переменной" истино, и заменяется на пустую строку если оно ложно.
    Конструкция вида
    Код:
    {if!=имя_переменной}
    тело
    {/if!=имя_переменной}
    
    в отличии от предидущей заменяется на "тело" если значение переменной "имя_переменной" ЛОЖНО, и заменяется на пустую строку если оно ИСТИННО.

    Вывод массивов (таблиц:(
    Вывод таблиц и прочих массивов обеспечивается следующей конструкцией:
    Код:
    <array=имя_массива>
    тело
    </array=имя_массива>
    
    Для каждого элемента массива выводится "тело" с заменой соответствующих переменных. Внутри "тела" массива применимы переменные вида {имя_массива.имя переменной}. Аналогично и условия в условных конструкциях.

    Пример вывода массива:
    Код:
    {array=people}
    {people.name}, {people.age} лет.
    {if=people.woman}Женщина{/if=people.woman}
    {if!=people.woman}Мужчина{/if!=people.woman}
    {/array=people}
    "Волшебные" переменные:
    В шаблонизаторе есть некоторые предопределенные переменные:
    _SELF - адрес страницы откуда вызван скрипт (аналог PHP_SELF) удобна для форм.
    В массивах есть такие переменные:
    _first - истина если это первая запись в массиве и ложна если НЕ первая.
    _last - истинна если последняя запись в массиве и ложна если НЕ последняя.
    _odd - истина если запись нечетная по порядку
    _even - истина если четная по порядку
    Четность/нечетность удобна для того, чтобы можно было выделять разным цветом рядом идущие строки, что улучшает юзабилити интерфейса. Часто не нужно выводить тот или иной тег или надпись если запись первая или последняя но выводить для всех остальных.

    Ниже идут "сложные" функции шаблонизатора. Данный функционал будет использоваться только в больших и сложных сайтах.

    Включения (include:(

    Конструкция вида {inc=имя_инклюда} означает "добавить вместо этой конструкции файл "имя_инклюда.tpl"
    Если инклюд встречается в скине или во вложенном файле скина, то файл ищется в папке скинов. Если инклюд встречается в шаблоне, то файл ищется в папке шаблонов.
    Инклюды могут быть в файлах которые были подключены инклюдами.
    Если Вы вставите инклюд внутри условного оператора, то возможно Вы получите неожиданный результат поскольку добавление инклюдов выполняется ДО выполнения условных конструкций.

    HOOK`и шаблонов (виджеты:(
    HOOK`и это когда в шаблоне делается некая пометка типа "здесь кончается главный блок" или "это начало верхнего меню" или "тут конец левой колонки" и т.п. Когда программист пишет плагин, то он просто указывает что такой-то шаблон нужно вставить вместо того или иного хука. Т.о. при разработке дизайна сайта не обязательно учитывать сразу все плагины. Достаточно расставить в нужных местах хуки, а уже разработчик плагина будет задумываться о том как правильно оформить свой плагин. Далее разработчик плагина хочет в этом месте вывести свой код... к примеру блок тэгов или календарь или рекламную ссылку или любой другой.
    В таком случае он указывает имя метки хука в месте которой он хочет вывести данный шаблон и название файла шаблона. Другой программист может указать ту же метку хука для другого плагина. Шаблонизатор выведет эти шаблоны один за другим.
    Метки хуков выглядят так: {#имя_метки}
    сами шаблоны хуков ничем не отличаются от обычных инклюдов.
    Если никаких хуков для данной метки нет, то метка просто удаляется из шаблона перед выводом.

    Объявление переменных внутри шаблона:
    Изредка бывает удобно объявить переменные прямо в шаблоне.
    Это удобно для хранения текстовых констант прямо в шаблоне давая дизайнеру возможность править тексты, или как один из вариантов организации мультиязычности или тайтл хранить в шаблоне а выводить в скине, или разместить бокс с "подсказками" в скине, а сами тексты подсказок хранить в шаблонах.
    Объявление переменных делается такой конструкцией: {$имя_переменной=значение переменной}
     
  2. mdss

    mdss ♖♘♗♕♔♗♘♖

    Moderator
    Регистр.:
    20 фев 2007
    Сообщения:
    1.126
    Симпатии:
    668
    смарти чем не устраивает?
     
  3. AleksWhite

    AleksWhite Постоялец

    Регистр.:
    5 фев 2008
    Сообщения:
    55
    Симпатии:
    10
    Все, что описно выше есть в Smarty http://www.smarty.net/manual/ru/
    В чем идея поста?
    Для каждого есть свой "Идеальный синтаксис" ;)
     
  4. Mendel

    Mendel

    Регистр.:
    27 янв 2008
    Сообщения:
    217
    Симпатии:
    64
    Ответ на ваш вопрос в первом абзаце:
     
Статус темы:
Закрыта.