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

Обработчик шаблонов (Основы) — различия между версиями

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

Перейти к: навигация, поиск
(Основы синтаксиса)
(Циклы)
 
(не показаны 24 промежуточных версий 1 участника)
Строка 1: Строка 1:
 +
[[Category:Интернет-магазин SaaS]]
 +
За основу был взят простой в использовании, но очень функциональный обработчик шаблонов от [http://webew.ru/articles/3609.webew Михаила Серова]. Данный обработчик поддерживает условные конструкции, циклы, подключение вложенных шаблонов и запуск сторонних модулей (функций)
 
== Основы синтаксиса ==
 
== Основы синтаксиса ==
 
+
<source lang="php">
<source lang="html">
+
<html>
&lt;html&gt;
+
<head>
&lt;head&gt;
+
 
     /* Многострочные комментарии - как в C или PHP */     
 
     /* Многострочные комментарии - как в C или PHP */     
     &lt;title&gt;{*title*}&lt;/title&gt;   
+
     <title>{*title*}</title>
     &lt;base href=&quot;{*=BASEHREF*}&quot;&gt; /* константа */    
+
         
     /* условные конструкции: */    
+
     /* условные конструкции: */
     {?*keywords*}  
+
     /* если keywords существует */  
        &lt;meta name=&quot;keywords&quot; content=&quot;{*keywords*}&quot;/&gt;
+
     {?*keywords*}<meta name="keywords" content="{*keywords*}">{*keywords*?}
    {*keywords*?}    
+
   
     {?*description*}
+
     {?*description*}<meta name="description" content="{*description*}">{*description*?}
        &lt;meta name=&quot;description&quot; content=&quot;{*description*}&quot;/&gt;
+
</head>
    {*description*?}
+
<body>
&lt;/head&gt;
+
     <div id="logo">
&lt;body&gt;
+
         <a href="/"><img src="{*logo.image*}" alt="{*logo.alt*}"></a>
     &lt;div id=&quot;logo&quot;&gt;
+
     </div>
         &lt;a href=""&gt;&lt;img src=&quot;{*logo.image*}&quot; alt=&quot;{*logo.alt*}&quot; /&gt;&lt;/a&gt;
+
 
     &lt;/div>
+
     <div id="menu">          
     &lt;div id=&quot;menu&quot;&gt;          
+
 
         /* цикл: */         
 
         /* цикл: */         
         {%*menu*}  
+
         {%*menu*}<a href="{*menu:url*}">{*menu:title*}</a>{*menu*%}     
            &lt;a href=&quot;{*menu:url*}&quot;>{*menu:title*}&lt;/a&gt;
+
     </div>
        {*menu*%}     
+
     &lt;/div&gt;
+
 
      
 
      
     &lt;div id=&quot;content&quot;&gt;
+
     <div id="content">
 
         {*content*}
 
         {*content*}
     &lt;/div&gt;
+
     </div>
 
      
 
      
     &lt;div id=&quot;footer&quot;&gt;
+
     <div id="footer">
         2fox.org &copy; {* @date(Y) *}  
+
         2fox.org &copy; {* @date(Y) *} /* модуль даты как PHP */
     &lt;/div&gt;
+
     </div>
&lt;/body&gt;
+
</body>
&lt;/html&gt;
+
</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 &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 */