Шаблонизатор
Рендеринг шаблонов с помощью CloudyKit Jet.
Типы записей
| Тип | Описание |
|---|---|
template.set |
Набор шаблонов с общей конфигурацией |
template.jet |
Отдельный шаблон |
Наборы шаблонов
Набор — это пространство имён для связанных шаблонов. Шаблоны внутри набора разделяют конфигурацию и могут ссылаться друг на друга по имени.
- name: views
kind: template.set
Все настройки необязательны и имеют разумные значения по умолчанию:
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
engine.development_mode |
bool | false | Отключить кеширование шаблонов |
engine.delimiters.left |
string | {{ |
Открывающий разделитель |
engine.delimiters.right |
string | }} |
Закрывающий разделитель |
engine.globals |
map | - | Переменные, доступные во всех шаблонах |
Шаблоны
Шаблоны принадлежат набору и идентифицируются по имени для внутреннего разрешения ссылок.
- name: layout
kind: template.jet
set: app.views:views
source: |
<html>
<body>{{ yield content() }}</body>
</html>
- name: home
kind: template.jet
set: app.views:views
source: |
{{ extends "layout" }}
{{ block content() }}
<h1>Добро пожаловать, {{ name }}</h1>
{{ end }}
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
set |
reference | Да | Родительский набор шаблонов |
source |
string | Да | Содержимое шаблона |
Разрешение шаблонов
Шаблоны ссылаются друг на друга по именам, а не по ID реестра. Разрешение работает как виртуальная файловая система внутри набора:
- По умолчанию имя записи (
entry.ID.Name) становится именем шаблона - Переопределите через
meta.nameдля кастомного именования:
- name: email-welcome-v2
kind: template.jet
set: app.emails:templates
meta:
name: welcome
source: |
{{ include "header" }}
Привет, {{ user }}!
Этот шаблон регистрируется как welcome в наборе, так что другие шаблоны используют {{ include "welcome" }} или {{ extends "welcome" }}.
Наследование
Шаблоны могут расширять родительские и переопределять блоки:
# Родитель определяет точки вставки
- name: base
kind: template.jet
set: app.views:views
source: |
<html>
<head><title>{{ yield title() }}</title></head>
<body>{{ yield body() }}</body>
</html>
# Потомок расширяет и заполняет блоки
- name: page
kind: template.jet
set: app.views:views
source: |
{{ extends "base" }}
{{ block title() }}Моя страница{{ end }}
{{ block body() }}<p>Контент</p>{{ end }}
Lua API
См. Модуль Template для операций рендеринга.