стандартный фильтр в категориях, работает по такому принципу
допустим первая группа фильтров "производители". выбираем производителя. показываются в списке только товары данного производителя, здесь все нормально.
вторая группа фильтров "мощность" выбираем мощность, показываются и производители ранее выбранной группы и товары у которых указана данная мощность других производителей, что уже в корне не верно.
правильно было бы если показывались товары только выбранного производителя с указанной мощностью
рассматривая код фильтра товара понимаешь что правильно он работать и не будет
if (!empty($data['filter_filter'])) {
$implode = array();
$filters = explode(',', $data['filter_filter']);
foreach ($filters as $filter_id) {
$implode[] = (int)$filter_id;
}
$sql .= " AND pf.filter_id IN (" . implode(',', $implode) . ")";
}
исправил код, кривовато на мой взгляд, но работает
if (!empty($data['filter_filter'])) {
$implode = array();
$filters = explode(',', $data['filter_filter']);
foreach ($filters as $filter_id) {
$implode[] = (int)$filter_id;
}
$results = $this->db->query("SELECT * FROM ".DB_PREFIX."filter WHERE filter_id IN (" . implode(',', $implode) . ")");
$arr = array();
foreach ($results->rows as $row) {
$arr[$row['filter_group_id']][] = $row['filter_id'];
}
$pids = array();
foreach ($arr as $key=>$value) {
if(count($pids)==0){
$results = $this->db->query("SELECT p.product_id FROM ".DB_PREFIX."product p INNER JOIN ".DB_PREFIX."product_filter pf ON p.product_id=pf.product_id where pf.filter_id IN (".implode(",",$value).")");
if($results->num_rows){
foreach ($results->rows as $row) {
$pids[] = $row['product_id'];
}
}
if(count($pids)==0) break;
} else {
$results = $this->db->query("SELECT p.product_id FROM ".DB_PREFIX."product p INNER JOIN ".DB_PREFIX."product_filter pf ON p.product_id=pf.product_id where p.product_id IN (".implode(',',$pids).") AND pf.filter_id IN (".implode(",",$value).")");
$pids = array();
if($results->num_rows){
foreach ($results->rows as $row) {
$pids[] = $row['product_id'];
}
}
if(count($pids)==0) break;
}
}
if(count($pids)){
$sql .= "AND p.product_id in (".implode(',',$pids).")";
} else {
$sql .= "AND p.product_id in (0)";
}
}