Обработчик шаблонов (Основы) — различия между версиями
Материал из wiki.2fox.org
2fox (обсуждение | вклад) |
2fox (обсуждение | вклад) (→Циклы) |
||
(не показаны 18 промежуточные версии 1 участника) | |||
Строка 1: | Строка 1: | ||
+ | [[Category:Интернет-магазин SaaS]] | ||
+ | За основу был взят простой в использовании, но очень функциональный обработчик шаблонов от [http://webew.ru/articles/3609.webew Михаила Серова]. Данный обработчик поддерживает условные конструкции, циклы, подключение вложенных шаблонов и запуск сторонних модулей (функций) | ||
== Основы синтаксиса == | == Основы синтаксиса == | ||
− | + | <source lang="php"> | |
− | <source lang=" | + | |
<html> | <html> | ||
<head> | <head> | ||
Строка 9: | Строка 10: | ||
/* условные конструкции: */ | /* условные конструкции: */ | ||
/* если keywords существует */ | /* если keywords существует */ | ||
− | {?*keywords*} | + | {?*keywords*}<meta name="keywords" content="{*keywords*}">{*keywords*?} |
− | + | ||
− | + | ||
− | {?*description*} | + | {?*description*}<meta name="description" content="{*description*}">{*description*?} |
− | + | ||
− | + | ||
</head> | </head> | ||
<body> | <body> | ||
<div id="logo"> | <div id="logo"> | ||
− | <a href=""><img src="{*logo.image*}" alt="{*logo.alt*}"></a> | + | <a href="/"><img src="{*logo.image*}" alt="{*logo.alt*}"></a> |
</div> | </div> | ||
Строка 32: | Строка 29: | ||
<div id="footer"> | <div id="footer"> | ||
− | 2fox.org © {* @date(Y)*} /* | + | 2fox.org © {* @date(Y) *} /* модуль даты как PHP */ |
</div> | </div> | ||
</body> | </body> | ||
</html> | </html> | ||
+ | </source> | ||
+ | |||
+ | == Условные конструкции == | ||
+ | <source lang="php"> | ||
+ | {?*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="раз"*?} | ||
+ | </source> | ||
+ | |||
+ | |||
+ | С помощью | можно также объединять в OR несколько условий: | ||
+ | <source lang="php"> | ||
+ | {?* var_1="one" | var_2="two" *} | ||
+ | var_1 равно "one" или var_2 равно "two" | ||
+ | {* var_1="one" | var_2="two" *?} | ||
+ | </source> | ||
+ | |||
+ | |||
+ | А с помощью & - в AND: | ||
+ | <source lang="php"> | ||
+ | {? *var_1="one" & var_2="two" *} | ||
+ | var_1 равно "one" и при этом var_2 равно "two" | ||
+ | {* var_1="one" & var_2="two" *?} | ||
+ | </source> | ||
+ | |||
+ | == Циклы == | ||
+ | В цикле ключи массива указываются через двоеточие — {*menu:title*}, а вне цикла через точку — {*logo.image*}. | ||
+ | <source lang="php"> | ||
+ | <div id="menu"> | ||
+ | {%*menu*} | ||
+ | <a href="{*menu:url*}">{*menu:title*}</a> | ||
+ | /* предопределенные переменные */ | ||
+ | /* {*menu:^KEY*} - вернет ключ элемента массива */ | ||
+ | /* {*menu:^COUNTER*} - переменная "счетчик". Переменная счетчик будет увеличиваться на единицу каждый раз при выполнении тела цикла */ | ||
+ | /* {*menu:^EVEN*} - вернет 1 в случае четного прохождения теля цикла и 0 в противном случае */ | ||
+ | {*menu*%} | ||
+ | </div> | ||
+ | </source> | ||
+ | |||
+ | == Вложенные шаблоны == | ||
+ | <source lang="php"> | ||
+ | ... | ||
+ | <div id="logo"> | ||
+ | <a href="/"><img src="{*logo.image*}" alt="{*logo.alt*}"></a> | ||
+ | </div> | ||
+ | |||
+ | {* +menu.html *} /* Подключаем шаблон меню. Файл должен иметь расширение html, путь указывается относительно директории шаблона */ | ||
+ | |||
+ | <div id="content"> | ||
+ | ... | ||
+ | </source> | ||
+ | |||
+ | |||
+ | == Передача во вложенный шаблон части массива данных == | ||
+ | <source lang="php"> | ||
+ | ... | ||
+ | <div id="logo"> | ||
+ | <a href="/"><img src="{*logo.image*}" alt="{*logo.alt*}"></a> | ||
+ | </div> | ||
+ | |||
+ | {* + *menu* | menu.html *} /* путь к шаблону в таком случае указываем через вертикальную черту */ | ||
+ | |||
+ | <div id="content"> | ||
+ | ... | ||
+ | </source> | ||
+ | |||
+ | Файл '''menu.html''' | ||
+ | <source lang="php"> | ||
+ | <div id="menu"> | ||
+ | {%**} | ||
+ | <a href="{*:url*}">{*:title*}</a> | ||
+ | {**%} | ||
+ | </div> | ||
+ | </source> | ||
+ | Конструкции вида {**}, {%**} и {?**} означают обращение к корневой переменной, переданной в шаблон. А запись вида {* + шаблон *} есть укороченная форма конструкции {* + ** | шаблон *} (** — в подключаемый шаблон передается вся корневая переменная). | ||
+ | |||
+ | |||
+ | == Вызов модулей == | ||
+ | Есть возможность вызывать специально подготовленные функции-модули прямо из шаблона. | ||
+ | <source lang="php"> | ||
+ | {* @date(Y-m-d) *} /* отобразит текущую дату в формате YYYY-MM-DD */ | ||
</source> | </source> |
Текущая версия на 23:36, 29 ноября 2015
За основу был взят простой в использовании, но очень функциональный обработчик шаблонов от Михаила Серова. Данный обработчик поддерживает условные конструкции, циклы, подключение вложенных шаблонов и запуск сторонних модулей (функций)
Содержание
Основы синтаксиса
<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 © {* @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 */