[РЕШЕНО] Вывод pdoResources по MULTISELECT

Всем привет.
Сервис онлайн заказа еды. Есть разделение меню по времени, например: завтрак, обед, ужин.
С помощью доп. поля «seviceTime» (типа: multiselect) (завтрак==1||обед==2||ужин==3||) каждому блюду можно назначить несколько вариантов в какое время оно отображается на сайте, например:

— салат Оливье (завтрак, обед)
— салат Крабовый (завтрак)
— Борщ (обед)
— Щи (обед, ужин)
— Запеканка (ужин)

В зависимости от времени суток некая переменная $servTime принимает значения 1, 2 или 3
Есть необходимость выводить ресурсы, у которых одно из значений доп. поля «seviceTime» соответвует $servTime.
Так как в некоторых ресурсах значение поля «seviceTime» может быть: 1,2 или 2,3 то такой вызов с помощью 'tvFilters'=>'serviceTime=='~$servTime не работает.

{$_modx->runSnippet('pdoResources',[
                            'parents'=>'15',
                            'tpl'=>'menuItem_tpl',
                            'depth'=>'1',
                            'includeTVs'=>'image,price,serviceTime',
                            'processTVs'=>'1', 
                            'tvFilters'=>'serviceTime=='~$servTime
Аналогично пробовал с where:
{$_modx->runSnippet('pdoResources',[
                            'parents'=>'15',
                            'tpl'=>'menuItem_tpl',
                            'depth'=>'1',
                            'includeTVs'=>'image,price,serviceTime',
                            'processTVs'=>'1', 
                           'where' => [
                                   "serviceTime:IN" => $servTime    
                                ]
В этих случаях если например сейчас обед, то выводятся только те ресурсы у которых в доп. поле «serviceTime» указано одно значение например — Борщ (обед). А если там несколько значений — салат Оливье (завтрак, обед), то этот ресурс не выводится.

Помогите, пожалуйста, составить условие, при котором будут выводиться все ресурсы у которых есть совпадения какого-либо из нескольких значений доп. поля «serviceTime» со значением переменной $servTime.
diskoden
07 мая 2020, 12:48
modx.pro
2
587
0

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

Илья Уткин
07 мая 2020, 14:17
2
+3
Проблема в том, что у доп. поля множественный выбор. Когда значение одно, фильтр нормально отрабатывает, но когда значений несколько, они сохраняются так: 1||2 и, конечно, это значение не равно 1.

Я выхожу из этой ситуации таким образом. В значениях доп. поля ставим не числа, а слова — завтрак==breakfast||обед==lunch||ужин==dinner||. В этом случае условие с LIKE нормально отработает и для случаев с одним значением, и для нескольких:

'where' => [
    'serviceTime:LIKE' => '%' ~ $servTime ~ '%'
]
    diskoden
    07 мая 2020, 15:12
    0
    Илья, спасибо огромное! Всё работает. А то начал уже пробовать вариант через теги.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2