Персональные инструменты

Обработчик шаблонов (Основы)

Материал из wiki.2fox.org

(перенаправлено с «Шаблонизатор (Основы)»)
Перейти к: навигация, поиск

За основу был взят простой в использовании, но очень функциональный обработчик шаблонов от Михаила Серова. Данный обработчик поддерживает условные конструкции, циклы, подключение вложенных шаблонов и запуск сторонних модулей (функций)

Основы синтаксиса

<html>
<head>
     /* Многострочные комментарии - как в C или PHP */     
     <title>{*title*}</title>
 
     /* условные конструкции: */  
     /* если keywords существует */   
     {?*keywords*}<meta name="keywords" content="{*keywords*}">{*keywords*?}
 
     {?*description*}<meta name="description" content="{*description*}">{*description*?}
</head>
<body>
     <div id="logo">
         <a href="/"><img src="{*logo.image*}" alt="{*logo.alt*}"></a>
     </div>
 
     <div id="menu">         
         /* цикл: */         
         {%*menu*}<a href="{*menu:url*}">{*menu:title*}</a>{*menu*%}     
     </div>
 
     <div id="content">
         {*content*}
     </div>
 
     <div id="footer">
         2fox.org &copy; {* @date(Y) *} /* модуль даты как PHP */ 
     </div>
</body>
</html>

Условные конструкции

 {?*a=1*} a равно 1 {*a=1*?}
 
 {?!*a=1*} a не равно 1 {*a=1*?!}
 
 {?*a>1*} a больше 1 {*a>1*?}
 
 {?!*a>1*} a не больше (т.е. меньше или равно) 1 {*a>1*?!}
 
 {?*a=b*} а равно b {*a=b*?}
 
 {?*a="раз"*} a - это "раз" {*a="раз"*?}


С помощью | можно также объединять в OR несколько условий:

 {?* var_1="one" | var_2="two" *} 
     var_1 равно "one" или var_2 равно "two"
 {* var_1="one" | var_2="two" *?}


А с помощью & - в AND:

 {? *var_1="one" & var_2="two" *} 
     var_1 равно "one" и при этом var_2 равно "two"
 {* var_1="one" & var_2="two" *?}

Циклы

В цикле ключи массива указываются через двоеточие — {*menu:title*}, а вне цикла через точку — {*logo.image*}.

<div id="menu">
     {%*menu*} 
         <a href="{*menu:url*}">{*menu:title*}</a>
         /* предопределенные переменные */
         /* {*menu:^KEY*} - вернет ключ элемента массива */
         /* {*menu:^COUNTER*} - переменная "счетчик". Переменная счетчик будет увеличиваться на единицу каждый раз при выполнении тела цикла */
         /* {*menu:^EVEN*} - вернет 1 в случае четного прохождения теля цикла и 0 в противном случае */
     {*menu*%}
</div>

Вложенные шаблоны

...
<div id="logo">
     <a href="/"><img src="{*logo.image*}" alt="{*logo.alt*}"></a>
</div>
 
 {* +menu.html *} /* Подключаем шаблон меню. Файл должен иметь расширение html, путь указывается относительно директории шаблона */
 
<div id="content">
 ...


Передача во вложенный шаблон части массива данных

...
<div id="logo">
     <a href="/"><img src="{*logo.image*}" alt="{*logo.alt*}"></a>
</div>
 
 {* + *menu* | menu.html *} /* путь к шаблону в таком случае указываем через вертикальную черту */
 
<div id="content">
 ...

Файл menu.html

<div id="menu">
     {%**}
         <a href="{*:url*}">{*:title*}</a>
     {**%}
</div>

Конструкции вида {**}, {%**} и {?**} означают обращение к корневой переменной, переданной в шаблон. А запись вида {* + шаблон *} есть укороченная форма конструкции {* + ** | шаблон *} (** — в подключаемый шаблон передается вся корневая переменная).


Вызов модулей

Есть возможность вызывать специально подготовленные функции-модули прямо из шаблона.

  {* @date(Y-m-d) *} /* отобразит текущую дату в формате YYYY-MM-DD */