Шаблонизатор

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

Простой пример шаблона:

    <!DOCTYPE html>
    <html>
    <head>
    <title>{$title}</title>
    </head>
    <body>
        {$content}
    </body>
    </html>

Теги шаблонизатора

  • {$variable}
  • {#constant#}
  • {include="template"}
  • {if="expression"}
  • {loop="array"}
  • {function="function name"}

{$variable}

В шаблоны передаются различные переменные из страниц и коллекций. Чтобы их вывести, достаточно указать название переменной в фигурных скобках и знаком $ в начале:

    {$name}, I am your father!
    ---
    Luke, I am your father!

Переменная может быть частью массива или объекта. Тогда её вывод выглядит следующим образом:

   {$array.key} 
   {$object->element}

Переменную также можно модифицировать при выводе, например:

   {$a=1} // 1
   {$b=2} // 2
   {$sum=$a+$b} // 3
    {$title|cut:10} // Hello Wor...
    {$title|touppercase|cut:7} // HELLO W...

Если это шаблон модуля страницы, то в него передаются две базовые переменные - {$title} и {$content} - заголовок и содержимое страницы.

В шаблоны модуля коллекции могут передаваться разные переменные, в зависимости от метода генерации страницы или блока. В общем случае есть 2 базовых метода:

Список элементов коллекции

В шаблон передается переменная $items. Она содержит массив всех выбранных элементов коллекции, каждый из которых содержит все поля данной коллекции по ключам. Также передается пажинатор - {$pages}, тексты до и после списка - {$text_before} и {$text_after}.

В общем виде вывести её можно, используя цикл, например:

<ul>
{loop="items"}
  <li>{$value.title}</li>
{/loop}
</ul>

Элемент коллекции

В шаблон передается переменная $item. Она содержит выбранный элементов коллекции со всеми полями. Также могут передаваться предыдущий и следующий элемент - {$prev} и {$next}, и тексты до и после элемента - {$text_before} и {$text_after}.

Пример вывода элемента коллекции:

<h1>{$item.title}</h1>
{$item.description}

{#constant#}

Можно выводить константы

    {#URL#}
    http://example.com

Но в системе константы широкого применения не нашли.

{include="template"}

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

    {include="common_header"}
    here goes the content of the website
    {include="common_footer"}

{if="expression"}

С помощью конструкции {if} можно проверять справедливость математических условий. Например:

    {if="$age<18"}
         minor
    {else}
         adult
    {/if}

Формат записи - {if="математическое выражение"}{/if}. Поддерживается оператор {else} и множественное деление по {elseif=""}.

Внутри кавычек должен находится код, отвечающий стандартам выражений языка PHP, но в общем случае это простая математика или сравнение переменных, например:

    {if="$item.type=='товар'"}
         это товар
    {elseif="$item.size > 100"}
        это что-то большое
    {else}
        вообще не понятно что это
    {/if}

{loop="var"}

Циклы позволяют поочередно выводить массивы данных. Например:

    <ul>
    {loop="items"}
        <li>{$counter}: {$key}, {$value}</li>
    {/loop}
    </ul>

$counter внутри цикла содержит порядковый номер итерации начиная с 0. $key - ключ элемента массива (обычно - порядковый номер). $value - значение элемента массива. Зачастую, $value также является массивом, и выводится как {$value.ключ_поля_коллекции}

Циклы могут быть вложенными. В таком случае для разделения уровней вывода используется цифровое порядковое обращение, например:

    <ul>
    {loop="items"}
        <li>Элемент коллекции номер {$value1.id} содержит поля:
            <ul>
                {loop="value1"}
                   <li>{$key2}: {$value2}</li>
                {/loop}
            </ul>
        </li>
    {/loop}
    </ul>

{function="function name"}

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

Например:

    {function="date('%Y')"} // 2016

{block="block_key"}

Вызов блока и подстановка результата его выполнения на страницу.

Заказать создание и продвижение сайта

Веб-студия «Инфра» занимается комплексным созданием и продвижением сайтов уже более 16 лет. SEO-оптимизация — основное направление нашей деятельности. Улучшим позиции вашего сайта в поисковых выдачах Яндекс и Google, увеличим посещаемость и количество заявок. Создадим сайт, идеальный для продвижения в поисковых системах.

Заказать разработку сайта