[РЕШЕНО] Вывод 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.
Комментарии: 2
                Проблема в том, что у доп. поля множественный выбор. Когда значение одно, фильтр нормально отрабатывает, но когда значений несколько, они сохраняются так: 1||2 и, конечно, это значение не равно 1.
Я выхожу из этой ситуации таким образом. В значениях доп. поля ставим не числа, а слова — завтрак==breakfast||обед==lunch||ужин==dinner||. В этом случае условие с LIKE нормально отработает и для случаев с одним значением, и для нескольких:
                    Я выхожу из этой ситуации таким образом. В значениях доп. поля ставим не числа, а слова — завтрак==breakfast||обед==lunch||ужин==dinner||. В этом случае условие с LIKE нормально отработает и для случаев с одним значением, и для нескольких:
'where' => [
    'serviceTime:LIKE' => '%' ~ $servTime ~ '%'
]            
                Илья, спасибо огромное! Всё работает. А то начал уже пробовать вариант через теги.            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.