pdoResources и фильтр TV

Привет сообщество!

Есть раздел портфолио (parent id = 11) с работами, есть страницы услуг (parent id = 10).
На странице услуги необходимо вывести вывести работу, которая относится к этой услуге, я сделал так:

1) TV «show_in_service» (список, одиночный выбор), разделитель "," + «возможные значения»
@EVAL return $modx->runSnippet('select_portfolio_service');

2) Сниппет «select_portfolio_service» который тянет список услуг с id = 10
<?php
$output = '';
$q = $modx->newQuery('modResource');
$q->where(array(
	"parent"    => "10"
));
$q->sortby('pagetitle','ASC');
$q->select(array(
	"modResource.id",
	"modResource.pagetitle",
));
$s = $q->prepare();
$s->execute();
while($row = $s->fetch(PDO::FETCH_ASSOC)){
	$data[] = "{$row['pagetitle']}=={$row['id']}";
}
$output = implode("||", $data);
return $output;

3) в работе портфолио выбираю необходимую услугу в этом TV и вывожу на странице самой услуги:
{$_modx->runSnippet('!pdoResources', [
	'tpl' => ''
	'parents' => 11,
	'includeTVs' => 'show_in_service'
	'tvFilters' => 'show_in_service===' ~ $_modx->resource.id
])}

С одиночным выбором всё работает отлично, но работы портфолио могут относиться к нескольким услугам, если сменить TV на множественный выбор, а в работе указать несколько услуг, то в массиве я уже получаю вместо [tv.show_in_service] => 17 — [tv.show_in_service] => 17||16||15 и соответственно выборка pdoResources не работает :(

Как правильно вывести каждую работу, которая относится к этой услуге?
Владимир
11 июня 2018, 01:47
modx.pro
1
3 124
0

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

Владимир
11 июня 2018, 05:08
0
Такой вариант работает:

1) в возможных значениях TV:
@EVAL return $modx->runSnippet('pdoResources',array(
'parents'=>'10',
'sortby'=>'{"menuindex":"ASC"}',
'tpl'=>'@INLINE [[+pagetitle]]==#[[+id]]#',
'outputSeparator'=>'||'
));

2) На странице услуги:
{$_modx->runSnippet('!pdoResources', [
	'tpl' => ''
	'parents' => 11,
	'tvFilters' => 'show_in_service==%#' ~ $_modx->resource.id ~ '#%'
])}

Но может быть есть более изящное решение? :)
Посоветуйте как правильно поступить )
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1