Оглавление

pdoSitemap — быстрый сниппет генерации карты сайта для поисковых систем (sitemap.xml). Главная особенность — очень высокая скорость, по сравнению с аналогичными сниппетами.

По умолчанию отключена проверка прав на доступ к документам. Это легко исправить включением параметра &checkPermissions (Внимание: замедляет работу!):

/* modParser */
[[!pdoSitemap?
    &checkPermissions=`list`
]]

/* pdoParser */
{$_modx->runSnippet('!pdoSitemap', [
'checkPermissions' => 'list'
])}

По возможности ресурсы лучше исключать из карты параметрами сниппета.

Параметры

pdoSitemap принимает все параметры pdoTools и некоторые свои:

Параметр По умолчанию Описание
&sitemapSchema http://www.sitemaps.org/schemas/sitemap/0.9 Схема карты сайта.
&forceXML 1 Принудительно выводить страницу как XML.
&priorityTV Дополнительное поле, в котором указывается приоритет документа. Нужно добавить его в параметр &includeTVs.

Шаблоны

Доступные шаблоны для формирования XML структуры:

&tpl

@INLINE <url>\n\t
<loc>[[+url]]</loc>\n\t
<lastmod>[[+date]]</lastmod>\n\t
<changefreq>[[+update]]</changefreq>\n\t
<priority>[[+priority]]</priority>\n
</url>

&tplWrapper

@INLINE <?xml version=\"1.0\" encoding=\"[[++modx_charset]]\"?>\n<urlset xmlns=\"[[+schema]]\">\n[[+output]]\n</urlset>

Приоритет и частота обновления для поисковиков устанавливаются в зависимости от последней даты изменения документа:

Времени с последнего обновления документа Приоритет Частота обновления
Менее суток назад 1.0 daily
Более суток и менее недели назад 0.75 weekly
Более недели и менее месяца назад 0.5 weekly
Более месяца назад 0.25 monthly

Инструкция по созданию файла sitemap.xml

  1. Создайте новый документ в корне сайта. На вкладке Документ выберите пустой шаблон, укажите Заголовок документа (не важно какой), и псевдоним sitemap. Проверьте, чтобы стояли галочки «Опубликован» и «Не показывать в меню».
  2. Перейдите на вкладку Настройки и укажите «Тип содержимого» — «XML».
  3. Уберите галочку с «Использовать HTML-редактор» и сохраните документ.
  4. В содержимом ресурса вызовите только сниппет pdoSitemap (см. Примеры ниже).

Примеры

Обычный вывод карты сайта для текущего контекста. В большинстве случаев этого может быть достаточно:

/* modParser */
[[pdoSitemap]]

/* pdoParser */
{$_modx->runSnippet('pdoSitemap')}

Генерируем карту сайта только из определённый контейнеров:

/* modParser */
[[pdoSitemap?
    &parents=`10`
]]

/* pdoParser */
{$_modx->runSnippet('pdoSitemap', [
'parents' => 10
])}

Исключаем ресурсы с id = 15 и 25, вместе с их потомками:

/* modParser */
[[pdoSitemap?
    &parents=`10, -15,-25`
]]

/* pdoParser */
{$_modx->runSnippet('pdoSitemap', [
'parents' => '10, -15,-25'
])}

А теперь исключаем id = 15 с потомками, а 25 — без:

/* modParser */
[[pdoSitemap?
    &resources=`-25`
    &parents=`-15,10`
]]

/* pdoParser */
{$_modx->runSnippet('pdoSitemap', [
'resources' => -25,
'parents' => '-15,10'
])}

Добавляем еще один контекст:

/* modParser */
[[pdoSitemap?
    &resources=`-25`
    &parents=`-15,10`
    &context=`web,catalog`
]]

/* pdoParser */
{$_modx->runSnippet('pdoSitemap', [
'resources' => -25,
'parents' => '-15,10',
'context' => 'web,catalog'
])}

А вот так можно посмотреть лог выборки карты:

/* modParser */
[[pdoSitemap?
    &resources=`-25`
    &parents=`-15,10`
    &context=`web,catalog`
    &showLog=`1`
    &forceXML=`0`
]]

/* pdoParser */
{$_modx->runSnippet('pdoSitemap', [
'resources' => -25,
'parents' => '-15,10',
'context' => 'web,catalog',
'showLog' => 1,
'forceXML' => 0
])}