Макет для страниц сайта
Макеты — это шаблоны, которые могут использоваться на любой странице вашего сайта и охватывать содержимое страницы.
Макеты создаются в каталоге _layouts.
Они могут наследоваться друг от друга создавая глубоко вложенную структуру, которая позволит в процессе написания материала на сайте, не отвлекаться на разметку, а сконцентрироваться только на содержимом.
Пример создания родительского “Макета”
Создадим самый основной и первоначальный макет от которого будут наследоваться другие макеты default.html.
У основного макета default.html нет конструкции front matter или как я его называю разделителя, который обозначится символами - - - - - - со свойством layout. Так как через данное свойство происходит наследование, а в данном случае основному макету не нужно ни от кого наследоваться.
Простой вариант
В простом варианте у нас есть некоторая основная разметка без использования конструкции include о которой речь пойдет в следующей статье или конструкции {% contentblock content %}.
Здесь мы просто используем служебную переменную {{ content }}, в которой находится содержимое записи различных типов, которые наследуются от этого шаблона.
Сложный вариант
В сложном варианте уже могут использоваться конструкции include, которая подключает файлы с отдельно вынесенное версткой. И конструкция {% contentblock <name> %}, которая резервирует область для определенного контента.
Пример создания дочернего “Макета”
Создадим дочерний базовый макет base.html, который каким либо образом дополняет содержимое основного макета default.html.
У базового макета base.html уже должна присутствовать конструкция front matter, которая обозначится символами - - - - - - со свойством layout. Так как через данное свойство происходит наследование, и в данном случае базовому макету base.html нужно наследоваться от основного default.html.
Наследование от default.html происходит благодаря конструкции layout: default, где default имя шаблона.
Простой вариант
В простом варианте мы дополняем то место в макете default.html где прописана конструкция {{ content }}. Именно на ее место будет вставлено содержимое файла base.html.
В свою очередь файл base.html так же имеет конструкцию {{ content }} на место которой подставится содержимое, наследуемое макет base.html. Это может быть либо тип записи, либо другой макет. Так как вложенность макетов друг в друга безгранична.
Сложный вариант
В сложном варианте мы так же используем конструкции include, а так же {% contentfor <name> %}, которая подставляет содержимое внутри этой конструкции в зарезервированную область по имени в макете default.html.
Вложенности нет предела
Как уже ранее говорилось мы можем иметь неограниченную вложенность со сложной структурой, позволяющую обеспечивать гибкость соответствующей потребностям нашей верстки.
Для примера создадим еще один макет steps.html, который будет наследоваться от макета base.html.
На место {{ content }} будет подставляться содержимое типа записи, которое наследует шаблон steps.
Область {% contentfor more-links %} подставится на место зарезервированной области в макете base.html, так как именно его наследует макет steps.
Запись
Замыкающим в этой цепи наследования является тип записи страница, статья либо коллекция.
Например:
Как видно в записи у нас нет ни какой разметки, а только сам материал в формате Markdown. Вся разметка находится в других файлах которые запись наследует каскадом.