Skip to content
  1. Компоненты
  2. SeoFilter
  3. Сниппеты
  4. sfSitemap

sfSitemap ​

Сниппет создан на основе класса меню, поэтому поддерживает почти все те параметры, что и sfMenu, за исключением вложенности и группировки. Для карты сайта настоятельно рекомендуется использовать подсчёты из базы и режим fast.

Также здесь взято многое из pdoSitemap и использовать их можно совместно, чтобы выводить всю карту на одной странице. Здесь напишу основные параметры и два примера, в остальном разобраться не сложно.

Различающиеся параметры от sfMenu ​

НазваниеПо умолчаниюОписание
&sitemapSchema<http://www.sitemaps.org/schemas/sitemap/0.9>Схема карты сайта.
&sortbylinkСортировка. По умолчанию по названию ссылки
&sortdirASCПорядок сортировки. По возрастанию
&outputSeparator\nРазделитель ссылок.
&forceXML1Принудительно выводить страницу как XML. При совместном использовании с pdoSitemap - отключите.

Шаблоны ​

&tpl - стандартный чанк ссылки

xml
@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 - чанк обёртка всей карты

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

Параметр changefreq ​

Данные аналогично сниппету pdoSitemap. Но за отправную дату берётся дата изменения ссылки, либо её создания, если не было изменений. Дата изменения меняется, когда по ссылке изменяется количество результатов.

Примеры использования ​

  1. Совместно использование pdoSitemap и sfSitemap. Вызов pdoSitemap:

    modx
    [[!pdoSitemap?
      &tplWrapper=`sitemap.wrapper`
    ]]

    Чанк sitemap.wrapper:

    fenom
    <?xml version="1.0" encoding="{'modx_charset' | option}"?>
    <urlset xmlns="{$schema}">
    {$output}
    {$_modx->runSnippet('sfSitemap', ['tplWrapper'=>'@INLINE {$output}', 'fast'=>1, 'mincount'=>1, 'forceXML'=>0])}
    </urlset>
  2. Отдельная карта сайта для SEO страниц:

    modx
    [[!sfSitemap?
      &fast=`1` // можно использовать countChildren, но это будет медленнее
      &mincount=`1`
    ]]