Шаблон Twig для Grav CMS, формирующий XML-документ страницы GetSimple CMS
Идея для рассматриваемого решения появилась благодаря возникшей необходимости в переносе содержания нескольких страниц из системы управления контентом Grav CMS в GetSimple CMS.
Так как выполнение задачи носило единоразовый характер, а объём данных, подлежащих переносу был небольшим, то было решено восспользоваться наиболее простым и наименее трудозатратным способом формирования стандартного для GetSimple CMS XML-документа страницы, не прибегая к программированию на PHP, а используя стандартные возможности Grav CMS.
Так как система управления контентом Grav CMS обладает встроенной поддержкой различных MIME-типов (Multipurpose Internet Mail Extension) возвращаемых документов, стоящая задача может быть решена на уровне шаблона оформления страницы. При этом даже не придётся изменять используемый шаблон, а достаточно создать новый, содержащий в имени файла возвращаемый тип документа: если для формирования HTML-документа страницы используется шаблон с именем page.html.twig
, то для формирования XML-документа, следует создать новый файл шаблона с именем page.xml.twig
. Новый шаблон будет автоматически использован при вызове страницы веб-сайта с добавлением к ней расширения .xml
, то есть, если страница доступна по адресу http://mysite.ru/page
, то для получения XML-документа с использованием нового шаблона, необходимо сделать запрос по адресу http://mysite.ru/page.xml
.
Приведённый код позволяет сформировать стандартный XML-документ страницы для GetSimple CMS версии 3.3:
<?xml version="1.0" encoding="UTF-8"?>
<item>
<pubDate>{{ page.date()|date('r') }}</pubDate>
<title><![CDATA[{{ page.title()|e('html') }}]]></title>
<url><![CDATA[{{ page.slug() }}]]></url>
<meta><![CDATA[{{ page.header.metadata.keywords }}]]></meta>
<metad><![CDATA[{{ page.header.metadata.description }}]]></metad>
<menu><![CDATA[{% if page.header.menu %}{{ page.menu() }}{% endif %}]]></menu>
<menuOrder><![CDATA[{% if page.visible() %}{% if page.parent().slug() == 'pages' %}{% for p in pages.children.visible %}{% if p.slug() == page.slug() %}{{ loop.index }}{% endif %}{% endfor %}{% else %}{{ pages.children.visible|count + 1 }}{% endif %}{% endif %}]]></menuOrder>
<menuStatus><![CDATA[{% if page.visible() %}Y{% endif %}]]></menuStatus>
<template><![CDATA[{{ page.template() ~ '.php' }}]]></template>
<parent><![CDATA[{% if page.parent().isPage() %}{{ page.parent().slug() }}{% endif %}]]></parent>
<content><![CDATA[{{ page.content()|e('html') }}]]></content>
<private><![CDATA[{% if not page.routable() %}Y{% endif %}]]></private>
<author><![CDATA[user]]></author>
</item>
Полученный XML-документ может быть сохранён в файл и помещён в директорию /data/pages/
системы управления контентом GetSimple CMS. Никаких обязательных дополнительных действий по его редактированию не требуется.
Узнать подробнее об использовании различных типов контента в Grav CMS можно здесь.