Фрагменты (Чанки, Partials)

Введение

Фрагментыx - это небольшой кусок Twig разметки, который можно многократно использовать в любом месте сайта (на разных страницах или макетах). Хорошим примером фрагмента является подвал сайта, который отображается на всех страницах. Кроме того, они необходимы для обновления содержимого страницы при помощи AJAX.

Фрагменты находятся в папке /partials темы и должны иметь расширение htm. Пример простого фрагмента:

<p>This is a partial</p>

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

description = "Demo partial"
==
<p>This is a partial</p>

Отображение фрагментов

Twig тег {% partial "partial-name" %} выводит фрагмент на страницу и имеет единственный обязательный параметр - название файла фрагмента без расширения. Если фрагмент находится в подпапке, то Вы должны указать ее название. Тег {% partial %} можно использовать в страницах, шаблонах и других фрагментах. Пример использования фрагмента на странице:

<div class="sidebar">
    {% partial "sidebar-contacts" %}
</div>

Передача переменных во фрагменты

Вам потребуется часто передавать переменные во фрагменты. Например, чтобы отфильтровать список записей в блоге по категории. Для этого нужно указать их после названия фрагмента. Пример:

<div class="sidebar">
    {% partial "blog-posts" posts=posts %}
</div>

Вы также можете задать свои переменные:

<div class="sidebar">
    {% partial "sidebar-contacts" city="Vancouver" country="Canada" %}
</div>

Внутри фрагмента доступ к переменным осуществляется как и везде:

<p>Country: {{ country }}, city: {{ city }}.</p>

Динамические фрагменты

Фрагменты, как и страницы, могут использовать любые возможности Twig (см. Динамические страницы).

Жизненный цикл фрагментов

Существуют специальные функции, которые могут быть указаны в Разделе PHP фрагментов: onStart() и onEnd(). Функция onStart() выполняется перед тем как фрагмент будет отображен на странице и перед тем как фрагменты компонентов ./components будут отображены. Функция onEnd() выполняется перед тем как фрагмент будет отображен на странице, но после того как рагменты компонентов ./components будут отображены. В этих функциях, например, Вы можете задать переменные для отображения:

==
function onStart()
{
    $this['hello'] = "Hello world!";
}
==
<h3>{{ hello }}</h3>

Язык разметки, используемый в October, описан в Руководстве по разметке. Последовательность вызовов обработчиков описана в Динамических макетах.

Ограничения жизненного цикла

Фрагменты отображаются по мере загрузки страницы. Поэтому есть некоторые ограничения:

  1. События AJAX не будту работать нормально во фрагментах.
  2. Функции onStart() и onEnd() не могут возвращать значения.
  3. Обработка форм происходит во время отображения фрагментов.

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