Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Исправление логики работы стандартного фильтра 1.0

   (7 reviews)    Find their other files

  764 11,174

1 Screenshot



    Create an account or sign in to download this

  • +1 2

About This File

Эта простая модификация изменяет логику стандартного фильтра.

Лучше объяснить на примере.

Допустим есть фильтры:

Цвет:

- синий

- зеленый

Размер:

- большой

- маленький

Если пользователь выберет напр. "синий", "зеленый" И "большой" то стандартный фильтр OpenCart покажет все товары, у которых есть хотя бы один из фильтров: "синий" ИЛИ "зеленый" ИЛИ "большой"

После установки этой модификации будут отображаться товары, у которых есть фильтры И ("синий" ИЛИ "зеленый") И "большой"

То есть, фильтры из одной группы работают по логике "ИЛИ", стандартно, а фильтры из разных групп по логике "И", что более логично, правильно и удобно для пользователя.

На оф. сайте есть модуль, который делает тоже самое, что и этот:

https://www.opencart.com/index.php?route=extension/extension/info&extension_id=23603

он рабочий, если судить по отзывам, но когда я открыл код этого модуля, то увидел там вот это:

 

// FixFilter

$minq=$this->db->query("

SELECT id.product_id FROM(SELECT

product_id, count(i.product_id) as t, c.filter_group as b

FROM

(SELECT

f.filter_id, f.product_id, p.filter_group_id

FROM

". DB_PREFIX ."product_filter f

left join ". DB_PREFIX ."filter p ON p.filter_id = f.filter_id

where

p.filter_id IN (" . implode(',', $implode) . ")

GROUP BY product_id , filter_group_id) as i,

(select

count(distinct filter_group_id) as filter_group

from

". DB_PREFIX ."filter_description f_b

WHERE f_b.filter_id in (" . implode(',', $implode) . ")) as c

GROUP BY product_id

HAVING t = B) as id");

$min=array();

for($x=0;$xrows);$x++){

foreach($minq->rows[$x] as $value){

$min[]=$value;

}

}

$imp=implode(',',$min);

// FixFilter END

// FixFilter

if(isset($filters)){

if(!count($min)){

$imp='0000000';

}

$sql .= " AND p.product_id IN(".$imp.")";

}

// FixFilter END

Мне это решение не понравилось и я решил написать свой вариант, который на мой взгляд получился более элегантным, простым и, возможно, даже и более быстрым (скорость этих 2-х решений я не проверял, если кто-то это сможет сделать - буду благодарен).

Поэтому теперь у пользователей есть выбор какое решение использовать.

Модуль тестировался на OpenCart 2.1.0.2, на других версиях - не тестировался, у кого есть возможно - протестируйте.



sv2109's Other Downloads


User Feedback

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.