Наследование шаблонов и макеты (Layouts)
Введение
Макеты (Layouts) определяют все элементы, которые повторяются на страницах, такие как заголовок, подвал и навигация. Обычно они включают в себя основную структуру HTML-документа, включая теги <html>, <head> и <body>, а также скрипты и таблицы стилей.
В контексте Symfony/Pimcore подход к этому вопросу отличается: шаблон может быть декорирован другим шаблоном. Это работает аналогично классам PHP: наследование шаблонов позволяет создать базовый "макет", который содержит все общие элементы вашего сайта, определенные как блоки (представьте "класс PHP с базовыми методами"). Дочерний шаблон может расширять базовый макет и переопределять любые его блоки (представьте "подкласс PHP, который переопределяет определенные методы родительского класса").
Скрипты макетов являются обычными скриптами представления и находятся в той же директории, что и обычные скрипты представления: /templates.
Для более подробной информации о наследовании шаблонов и макетах настоятельно рекомендуется ознакомиться с документацией Symfony.
Использование макетов
Простая структура макета может выглядеть следующим образом:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Пример</title>
<link rel="stylesheet" type="text/css" href="/static/css/global.css" />
</head>
<body>
<div id="site">
{{ block('content') }}
</div>
</body>
</html>
Конечно, в файле макета можно использовать редактируемые элементы и хелперы шаблонов, и, следовательно, макеты могут стать значительно более сложными. Однако наиболее важной строкой является {{ block('content') }}, которая включает отображаемое содержимое представления.
Использование макета в шаблоне
Чтобы использовать макет в шаблоне, достаточно объявить родительский шаблон с помощью следующего кода:
{% extends 'layout.html.twig' %}
В этом примере мы расширяем шаблон layout.html.twig, но можем использовать любой другой шаблон и столько, сколько необходимо скриптов.
Полный пример документа страницы будет выглядеть следующим образом:
{% extends 'layout.html.twig' %}
...
{% block content %}
<h1>
{{ pimcore_input('headline', {'width': 540}) }}
</h1>
{% endblock %}
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.