Перейти к основному содержимому

Наследование шаблонов и макеты (Layouts)

Введение

Макеты (Layouts) определяют все элементы, которые повторяются на страницах, такие как заголовок, подвал и навигация. Обычно они включают в себя основную структуру HTML-документа, включая теги <html>, <head> и <body>, а также скрипты и таблицы стилей.

В контексте Symfony/Pimcore подход к этому вопросу отличается: шаблон может быть декорирован другим шаблоном. Это работает аналогично классам PHP: наследование шаблонов позволяет создать базовый "макет", который содержит все общие элементы вашего сайта, определенные как блоки (представьте "класс PHP с базовыми методами"). Дочерний шаблон может расширять базовый макет и переопределять любые его блоки (представьте "подкласс PHP, который переопределяет определенные методы родительского класса").

Скрипты макетов являются обычными скриптами представления и находятся в той же директории, что и обычные скрипты представления: /templates.

Для более подробной информации о наследовании шаблонов и макетах настоятельно рекомендуется ознакомиться с документацией Symfony.

Использование макетов

Простая структура макета может выглядеть следующим образом:
<!DOCTYPE html>  
<html lang="en">
<head>
&lt;meta charset="UTF-8"&gt;
<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 %}


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.