Перейти до согдержимоеу
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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

   (7 відгуків)    Інші файли автора

sv2109
  733 9 437

1 скріншот



    Створити обліковий запис или увійдіть, чтоб заванижити это

  • +1 2

Опис файлу

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

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

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

Цвет:

- синий

- зеленый

Размер:

- потому чтольшой

- мнонький

Если пользователь выберет напр. "синий", "зеленый" И "потому чтольшой" то синдартный фильтр 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


Відгуки користувачів

  • Сейчас на сторінці   0 користувачів

    • Нет користувачів, какі переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка гдекаких персональних данных користувачів, чтоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і какі персональнет данет ми обробляємо перейдите за посиланням . Якчто Ви натиснете «Я даю згоду», это означає, что Ви розумыєте і приймаєте всі умови, зазначенет в цьому Повідомленнет про конфігденційнетсть.