dimayakovlev.ru


Шаблон 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 можно здесь.