[РЕШЕНО костылём] pdoResources + tvFilters + multiple select (или) tvFilters и массив
У документа есть tv с множественным выбором, например, Пользователи. При заполненном tv и выборе юзеров с ID 1, 2, 3 и 4 [[+tvUsers]] логично выводит 1,2,3,4
Каким образом можно вызвать pdoResources, указав в tvFilters одно из этих значений, но точное? Оборачивать в % не получится, потому что при фильтрации по ID = 1 сюда же попадут и 10 и 11 и 21 и так далее.
Похожий топик из сети.
Каким образом можно вызвать pdoResources, указав в tvFilters одно из этих значений, но точное? Оборачивать в % не получится, потому что при фильтрации по ID = 1 сюда же попадут и 10 и 11 и 21 и так далее.
Похожий топик из сети.
Комментарии: 11
Нууу… Для вывода юзеров логичнее было бы использовать pdoUsers и от всей души любить читать документации, если таковая есть) Благо у pdoTools отличная документация за что Василию спасибо.
Если задача стоит выводить именно юзеров то есть параметр &users
Если задача стоит выводить именно юзеров то есть параметр &users
Неважно ведь Users там или Colors. Ну, будут цвета blue и darkblue, а я хочу отфильтровать blue, а не получится, потому что tv выведет blue,darkblue. А если добавлять %blue%, то может быть цвет blueblue, что тоже не является корректным. Юзеров я привёл для наглядности. Вопрос в том как отфильтровать ресурсы, у которых есть точное значение в массиве, то есть списке с использованием delimiter.
цвет blueblueВот это вот в голове произносить нормально не могу ?
[[pdoResources?
&parents=`0`
&includeTVs=`color`
&where=`{
"color:IN": ["синий","желтый"]
}`
&tpl=`@INLINE [[+pagetitle]]`
]]
{'pdoResources' | snippet : [
'parents' => 0,
'includeTVs' => 'color',
'where' => [
'color:IN' => ["синий","желтый"]
],
'tpl' => '@INLINE {$pagetitle}'
]}
Ну а если вас мучает вопрос про delimiter сделать сниппет-модификатор который вот это:синий,желтый
вернет как:"синий","желтый"
Ну или же пойти на хитрость и delimiter указать "," (с кавычками), и тогда будет приходить синий","желтый
останется сделать так:[[pdoResources?
&parents=`0`
&includeTVs=`color`
&where=`{
"color:IN": ["[[*color]]"]
}`
&tpl=`@INLINE [[+pagetitle]]`
]]
Не проверял, но должно работатьНадеюсь, что я вас правильно понял и что объяснил доходчиво.
Спасибо за ответ. Объясню своим кодом:
$resources должен быть списком разрешённых ресурсов или тех ресурсов (если не брать мой пример), в котором в множественном списке TV OwnedBy один из вариантов был бы $uid.
Я пытаюсь сообразить можно ли сделать как-то конструкцию по типу where, превратить вашу строчку
$profile = $modx->user->getOne('Profile');
$uid = $profile->get('id'); // = 21
$resources =
$modx->runSnippet('pdoResources',array(
'includeTVs'=>'OwnedBy', // = 21,22,23,24
'processTVs'=>'1',
'tvFilters'=>'OwnedBy==' . $uid, // вот эту строчку надо заменить
'tpl'=>'@INLINE {{+id}}'',
'outputSeparator'=>','));
$resources должен быть списком разрешённых ресурсов или тех ресурсов (если не брать мой пример), в котором в множественном списке TV OwnedBy один из вариантов был бы $uid.
Я пытаюсь сообразить можно ли сделать как-то конструкцию по типу where, превратить вашу строчку
&where=`{
"color:IN": ["синий","желтый"]
}`
во что-то грубо говоря типа&where=`{
"$uid:IN": [OwnedBy]
}`
А если вопрос был задан именно про то как бы запихнуть список через запятую, то:
{'pdoResources' | snippet : [
'parents' => 0,
'where' => [
'id:IN' => [1,8]
],
'tpl' => '@INLINE {$pagetitle}',
'showLog' => 0
]}
Решилось добавлением кастомного TV Output с примерно следующим кодом:
$multiples = explode("||", $value);
foreach ($multiples as $multiple) {
$o .= 'u' . $multiple . 'u';
}
return $o;
Он добавляет 'u' в начало и в конец значения, поэтому можно вызывать через %u____u%
А, нет, не решилось, pdoResources ведь ищет по значениям базы, а не Output. Пока идея только написать плагин, который бы при сохранении документа переписывал значения в нужном формате в отдельный TV и использовать его.
Способ помог:
— новый TV, который хранит инфу для pdoResources
— плагин, который срабатывает на OnDocFormSave и конвертит данные в этот TV
— pdoResources с tvFilter %u____u%
— новый TV, который хранит инфу для pdoResources
— плагин, который срабатывает на OnDocFormSave и конвертит данные в этот TV
— pdoResources с tvFilter %u____u%
Решаю похожий вопрос,
напишите пожалуйста код плагина, который конвертирует данные в ТВ
напишите пожалуйста код плагина, который конвертирует данные в ТВ
Разобрался сам. не актуально.
не так сложны оказались эти плагины.
не так сложны оказались эти плагины.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.