При указании tvFilters ничего не возвращает.

Добрый день!

Проблема с фильтрацией по tv (radio, с checkbox'ом ситуация та же). При выборе «Да» (значение по умолчанию) ресурс должен отображаться в плитке, при «Нет» соответственно — нет. Но когда добавляю
'tvFilters' => '[\'show_in_list\' => \'true\']'
ничего не выводится.
Полный код вызова pdoResources (в $where пусто, в $depth — 0):
{$_modx->runSnippet('pdoResources', [
	'depth'         => $depth,
	'select'        => 'modResource.id, modResource.uri, modResource.class_key,  modResource.pagetitle, modResource.menutitle, `medium`.`url` as medium',
	'leftJoin'      => '{"medium" : {"class" : "msProductFile", "on" : "`medium`.`product_id` = modResource.id AND `medium`.`path` LIKE \'%/medium/%\'"}}',
	'tpl' 	        => 'tile_link-only',
	'limit'         => 30,
	'includeTVs'    => 'image,show_in_list',
	'tvFilters'     => 'show_in_list===true',
	'groupby'       => 'modResource.id',
	'where'         => $where,
	'includeThumbs' => 'medium',
	'sortby'        => '{"menuindex":"ASC"}',
	'showLog'       => 0
])}
Делал по этому посту.

Пытался сделать через where:
'where' => '[\'show_in_list\' => \'true\']',
выводит все ресурсы.

Читал, что Василий не рекомендует использовать tvFilters, но других вариантов кроме перечисленных не вижу.

Почему в моём случае tvFilters не срабатывает как надо?
BurSt
29 августа 2017, 06:50
modx.pro
953
0

Комментарии: 5

Александр
29 августа 2017, 10:03
0
добавьте параметр 'return' => 'sql'
По запросу в бд проще понять, что там происходит
    BurSt
    29 августа 2017, 11:23
    0
    SELECT SQL_CALC_FOUND_ROWS modResource.id, modResource.uri, modResource.class_key, modResource.pagetitle, modResource.menutitle, `medium`.`url` as medium, IFNULL(`TVimage`.`value`, '') AS `tv.image`, IFNULL(`TVshow_in_list`.`value`, 'true') AS `tv.show_in_list` 
    FROM `modx_site_content` AS `modResource` 
    LEFT JOIN `modx_ms2_product_files` `medium` ON `medium`.`product_id` = modResource.id AND `medium`.`path` LIKE '%/medium/%' 
    LEFT JOIN `modx_site_tmplvar_contentvalues` `TVimage` ON `TVimage`.`contentid` = `modResource`.`id` AND `TVimage`.`tmplvarid` = 4 
    LEFT JOIN `modx_site_tmplvar_contentvalues` `TVshow_in_list` ON `TVshow_in_list`.`contentid` = `modResource`.`id` AND `TVshow_in_list`.`tmplvarid` = 6 
    WHERE ( `TVshow_in_list`.`value` = 'true' AND `modResource`.`parent` IN (20) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 ) 
    GROUP BY modResource.id 
    ORDER BY modResource.menuindex ASC LIMIT 30
    судя по запросу условие есть, ресурсы с show_in_list = true есть, но в результатах пусто
      Александр
      29 августа 2017, 12:47
      0
      -
        Александр
        29 августа 2017, 13:05
        +1
        только наверно вручную прописывать в WHERE:
        IFNULL(`TVshow_in_list`.`value`, 'true') = 'true'

        Почему то where не подхватывает IFNULL
          BurSt
          31 августа 2017, 13:32
          0
          спасибо, работает
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5