pdoResources и фильтрация tv со значениями по умолчанию. sitemap.xml

#разработка, #MODx, #MODx Revo, #migx, #pdoTools, #pdoResource
pdoResources и фильтрация tv со значениями по умолчанию. sitemap.xml

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

Дополнительные поля для карты сайта можно использовать следующие:

  1. prior - приоритет обновлений - одиночный список со значениями (0.1||0.2||0.3||0.4||0.5||0.6||0.7||0.8||0.9||1), значение по умолчанию - 0.7
  2. freq - частота изменений - одиночный список со значениями: (always||hourly||daily||weekly||monthly||yearly||never), где значение по умолчанию - weekly

Работоспособность sitemap.xml можно оттестировать по адресу https://webmaster.yandex.ru/sitemaptest.xml


Поделиться в соцсетях:

Статьи по теме