Могут возникнуть трудности при выборке с помощью pdoResources, когда стоит задача применить фильтрацию по tv, значения которого не обязательно существуют в базе. Фильтр для ресурсво, у которых значение tv не установлено, не попадут в выборку.
Обойти это ограничение можно, использя явно leftJoin без применнеия параметра tvFilters. Ниже приведен код вызова на примере генерации карты сайта. Для ресурсов было создано tv-чекбокс для исключения ресурса из карты сайта. Если чекбокс активен (Да==1), то ресурс не выводится в sitemap.xml. Важными параметрами в данном вызове являются leftJoin и where.
[[pdoResources?
&parents=`0`
&tpl=`tpl_sitemap`
&limit=`0`
&includeTVs=`prior,freq`
&depth=`10`
&select=`id,editedon,createdon`
&leftJoin=`{
"tvval": {
"class":"modTemplateVarResource"
,"alias":"tvval"
,"on": "modResource.id = tvval.contentid AND tvval.tmplvarid = XX"
}
}`
&where=`["(`tvval`.`value` IS NULL OR `tvval`.`value` != '1')"]`
]]
Где на место ХХ в условии tvval.tmplvarid = XX подставляется id tv-чекбокса, для определения, исключить ресурс из карты или нет.
Чанк для вывода эелемента можно использовать следующий:
<url>
<loc>[[~[[+id]]? &scheme=`full`]]</loc>
<lastmod>[[+editedon:default=[[+createdon]]:date=`%Y-%m-%dT%H:%M:%S`]]+04:00</lastmod>
<priority>[[+tv.prior]]</priority>
<changefreq>[[+tv.freq]]</changefreq>
</url>
При этом вызывать pdoResource в теге:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
[[pdoResources]]
</urlset>
Дополнительные поля для карты сайта можно использовать следующие:
- prior - приоритет обновлений - одиночный список со значениями (0.1||0.2||0.3||0.4||0.5||0.6||0.7||0.8||0.9||1), значение по умолчанию - 0.7
- freq - частота изменений - одиночный список со значениями: (always||hourly||daily||weekly||monthly||yearly||never), где значение по умолчанию - weekly
Работоспособность sitemap.xml можно оттестировать по адресу https://webmaster.yandex.ru/sitemaptest.xml