Могут возникнуть трудности при выборке с помощью 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
Количество просмотров: 3 685