[РЕШЕНО] Вывод 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 ~ '%'
]
Илья, спасибо огромное! Всё работает. А то начал уже пробовать вариант через теги.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.