Перейти к содержанию

Создание блога⚓︎

Загрузите и установите локально скелет блога из https://getgrav.org/downloads/skeletons, или, по крайней мере, следите за репозиторием https://github.com/getgrav/grav-skeleton-blog-site. Это пример сайта, который использует тему Antimatter. Наличие запущенного сайта Grav, который уже работает со структурой блога, несомненно, поможет вам, если вы застряли или не понимаете, что делать дальше.

Проверьте, что ваша тема предоставляет шаблоны страниц блога и элементов⚓︎

Давайте начнем с простого: выберите тему, которая уже предоставляет шаблон страницы блога. Например Antimatter, TwentyFifteen, Deliver, Lingonberry, Afterburner2 и многие другие. Как проверить, есть ли в вашей теме шаблон страницы блога? Зайдите в папку /user/themes/[yourtheme]/templates и проверьте наличие файлов blog.html.twig и item.html.twig.

Если вы уже выбрали тему, и ваша тема не поставляется с этими файлами, скопируйте их из Antimatter: https://github.com/getgrav/grav-theme-antimatter/tree/develop/templates (Если вы скопируете файлы из этой темы, вам также понадобятся два фрагмента с именами blog_item.html.twig и sidebar.html.twig. Они должны быть помещены в папку templates/partials).

Возможно, вам придется настроить разметку в соответствии с вашей темой. Лучший вариант, если вы только начинаете, - использовать тему, которая уже идёт в комплекте.

Создайте структуру страниц блога⚓︎

Есть разные способы структурировать страницы. По умолчанию и проще - иметь родительскую страницу типа Blog и дочерние страницы для сообщений блога.

С плагином админки⚓︎

Создайте страницу типа Blog. Эта страница - «Домашняя страница» блога со списком сообщений блога.

Создайте одну или несколько дочерних страниц типа Item. Это сообщения в блоге.

Вручную⚓︎

Зайдите в свою папку pages/, создайте страницу 01.blog (измените номер, чтобы отразить структуру вашего меню), добавьте в нее файл blog.md. В этот файл добавьте это содержимое:

---
content:
  items: '@self.children'
---

Это заставляет Grav перебирать подстраницы (сообщения в блоге).

Создайте подпапку для каждого сообщения, которое хотите добавить, и добавьте в каждую папку файл item.md с содержимым сообщения в блоге.

URL-адреса⚓︎

Структура, описанная выше, будет создавать сообщения блога с /blog/ в URL-адресе. Возможно, это не то, что вам нужно. Например: если блог - это всё, что у вас есть на вашем сайте, а список сообщений блога является домашней страницей. В этих случаях вам просто нужно, чтобы ваш корневой домен имел доступ к этому контенту, а не направлял посетителей в дочерний каталог.

В этом случае в system.yaml (конфигурация системы в админке) установите для параметра home.hide_in_urls (Скрыть home в URL-адресах) значение true.

Внутренняя работа⚓︎

Возможно, вы захотите узнать, как это работает. Шаблон блога, содержимое файла blog.html.twig, находящегося в папке templates/ темы, просто перебирает свои дочерние страницы.

Самый простой способ:

{% set collection = page.collection() %}

{% for child in collection %}
    {% include 'partials/blog_item.html.twig' with {'blog':page, 'page':child, 'truncate':true} %}
{% endfor %}

page.collection() по умолчанию выбирает свойство content.items из метаданных YAML и возвращает массив, содержащий элементы, соответствующие этому определению.

Если страница содержит:

---
content:
  items: '@self.children'
---

тогда collection будет массивом подстраниц текущей страницы.

В этом случае тема включает в себя часть partials/blog_item.html.twig, отвечающую за визуализацию отдельного сообщения в блоге, и передает ему дочерний объект, содержащий фактическое сообщение в блоге для отображения.

Узнать больше⚓︎