Объединение в условии where IN для msproducts
Подскажите пожалуйста, где ошибка?:
Для сниппета msProducts задаю условие where
Added where condition: class_key=msProduct, vendor.id:IN(3,2)
В запросе получается
WHERE ( `msProduct`.`class_key` = 'msProduct'AND `vendor`.`id` IN (3) AND isfolder=0 AND `msProduct`.`parent` IN (22,35,38,39,40,41) AND `msProduct`.`published` = 1 AND `msProduct`.`deleted` = 0 ) GROUP BY msProduct.id ORDER BY msProduct.pagetitle asc LIMIT 3 „
Или может кто знает, как в условии where вместо оператора AND что бы подставлялся OR?
Для сниппета msProducts задаю условие where
if(!empty($_GET['brands'])) {
$brs = array();
$brs = implode(',',$_GET['brands']);
$filter[] = array('vendor.id:IN' => array($brs));
}
$where = $modx->toJSON($filter);
И он выводит только по одному бренду, хотя в условии содержится Added where condition: class_key=msProduct, vendor.id:IN(3,2)
В запросе получается
WHERE ( `msProduct`.`class_key` = 'msProduct'AND `vendor`.`id` IN (3) AND isfolder=0 AND `msProduct`.`parent` IN (22,35,38,39,40,41) AND `msProduct`.`published` = 1 AND `msProduct`.`deleted` = 0 ) GROUP BY msProduct.id ORDER BY msProduct.pagetitle asc LIMIT 3 „
Или может кто знает, как в условии where вместо оператора AND что бы подставлялся OR?
Комментарии: 2
$_GET['brands'] — это точно массив? Есть предположение что у вас на входе только последнее значение с ID бренда.
В $_GET['brands'] все нормально. я же писал —
Получилось решить так —
а то я вывожу фильтр
а надо pdopage использовать внутри filter, что бы пагинация при ajax работала. (Хоть и не уверен, пока,
что будет работать), но у меня там появляется кнопка «Загрузить еще» и она отлично работает, так, что пагинация и не нужна
Added where condition: class_key=msProduct, vendor.id:IN(3,2)Я так понял неправильно работает $modx->toJson, т.е. из массива array(1,2) он создает [{«1,2»}] а надо [{«1»,«2»}].
Получилось решить так —
if(!empty($_POST['brands'])) {
foreach($_POST['brands'] as $brand)
{
if($brand > 0)
$brs .= '"'. $brand.'"' . ',';
}
$brs=substr($brs, 0, -1);
}
$brandsStr = strlen($brs) ? '[{"Vendor.id:IN":['. $brs . ']}]' : '';
а потом уже в $where добавлятьif($brandsStr && $where) $newwhere = '['. $brandsStr . ',' . $where . ']';
if($brandsStr && !$where) $newwhere = '['. $brandsStr . ']';
else $newwhere = $where;
Кстати неплохой, легкий ajax фильтр получился, теперь только с пагинацией разобраться осталось,а то я вывожу фильтр
[[!pdoPage? &element=`filter`
&tpl=`productsgridTpl`
&limit=`3`
&parents=`[[*id]]`
]]
а надо pdopage использовать внутри filter, что бы пагинация при ajax работала. (Хоть и не уверен, пока,
что будет работать), но у меня там появляется кнопка «Загрузить еще» и она отлично работает, так, что пагинация и не нужна
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.