Фильтрация по числовому TV в mFilter2 (where)
Всем здравствуйте!
Не могу понять, в чем я туплю — перепробовал кучу разных вариантов, и ни один не срабатывает как нужно.
Есть товары, у которых бренд задан через TV, в который подгружается список ресурсов. Соответственно, значение этого поля у самого товара — числовое.
В категории выбираю только включенные бренды:
Не могу понять, в чем я туплю — перепробовал кучу разных вариантов, и ни один не срабатывает как нужно.
Есть товары, у которых бренд задан через TV, в который подгружается список ресурсов. Соответственно, значение этого поля у самого товара — числовое.
В категории выбираю только включенные бренды:
{set $published_brands = '!pdoResources' | snippet : [
'parents' => 2,
'depth' => 0,
'limit' => 0,
'returnIds' => 1
]|strToArray}
и далее вызываю сам фильтр:{'!mFilter2' | snippet : [
'parents' => $_modx->resource.id,
'includeTVs' => 'brand',
'where' => '{ "TVbrand.value:IN": $published_brands }'
'class' => 'msProduct',
'element' => 'msProducts',
'sortby' => 'editedon',
'sortdir' => 'DESC',
'limit' => 18,
...
}
В итоге, в выдачу упорно попадают товары от выключенных брендов. Ни ручная подстановка значений вида [1,2,3] вместо $published_brands, ни вариации с «brand:IN», ничего такое не решает проблему. Подскажите кто-нибудь, пожалуйста, я запутался. Комментарии: 7
если уж используете fenom проще писать через массивы
{'!mFilter2' | snippet : [
'parents' => $_modx->resource.id,
'includeTVs' => 'brand',
'where' => ["TVbrand.value:IN" => $published_brands],
'class' => 'msProduct',
'element' => 'msProducts',
'sortby' => 'editedon',
'sortdir' => 'DESC',
'limit' => 18,
}
А если очень хочется json'where' => '{ "TVbrand.value:IN": ' ~ $published_brands~' }'
Вот с json почему-то не срабатывало, а с массивом получилось.
А что это за модификатор — strToArray? Переменная $published_brands что возвращает?
Зы: а, не увидел в условии, что подстановка массива не помогает…
Зы: а, не увидел в условии, что подстановка массива не помогает…
И что возвращает само ТV- поле brand? Может, разделителя нет? Или не тот?
И ещё скорее всего TV.brand:IN вместо TVbrand.value:IN. И ещё $published_brands можно массивом оставить.
Вот такой вариант должен сработать (с массивом в where и модификатором split, который разбивает $published_brands по запятой):
Почему-то JSON не принимает переменную $published_brands. Я сходу не разобрал, как её корректно подставить…
{set $published_brands = '!pdoResources' | snippet : [
'parents' => 2,
'depth' => 0,
'limit' => 0,
'returnIds' => 1
] | split : ','}
{'!mFilter2' | snippet : [
'parents' => $_modx->resource.id,
'includeTVs' => 'brand',
'where' => ["TVbrand.value:IN" => $published_brands],
'class' => 'msProduct',
'element' => 'msProducts',
'sortby' => 'editedon',
'sortdir' => 'DESC',
'limit' => 18
...
]
}
Почему-то JSON не принимает переменную $published_brands. Я сходу не разобрал, как её корректно подставить…
Шик! Я просто уже в порядке эксперимента разное пробовал и забыл про split.
И да, в таком виде — с массивом в where все заработало! Премного благодарен.
И да, в таком виде — с массивом в where все заработало! Премного благодарен.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.