Помощь Фильтр товаров simplacms

kycher666

Постоялец
Регистрация
17 Ноя 2012
Сообщения
51
Реакции
12
Есть модуль который фильтрует в категориях товары по цене и вариантам.
Вот он на нашем форуме - Для просмотра ссылки Войди или Зарегистрируйся
Но в нем проблема!
Когда у варианта товара количество 0, то фильтр все равно его показывает.

Подскажите куда и какое подставить условие, чтобы фильтр не отображал товаров которых нет в наличии.
 

Вложения

  • Фильтр по вариантам и цене + мультифильтр.rar
    821,1 KB · Просмотры: 129
  • Заблокирован
  • #2
Может ты не весь код вставил?
В инструкции явно написано
PHP:
if(!empty($filter['in_stock']) && $filter['in_stock'])
$instock_filter = $this>db>placehold('AND (v.stock>0 OR v.stock IS NULL)');
на форуме симплы тоже Для просмотра ссылки Войди или Зарегистрируйся
 
Спасибо за ответ! Да, я понимаю это) Времени благо очень много потратил и на попытки исправить данный баг и на поиски кто поможет за адекватные деньги( Да и не понятно, тот кто использует фильтр, что легко живут с этим?)
Средняя зп за час 150-250р, а никому не надо, ну что ж завидую всем им, раз уж это уже не деньги и проектов и работы у всех завались.
Я предлагал до 300руб. или пиво или обмен на seo аудит или на парсинг любых данных или на подбор слов, бартер к слову... а работа-то сто пудово на 15 минут для не такого тупого как я.

Ну лан, хватит плакаться, попробую тут написать как работает скрипт этот, а если мало ли, поправьте, направьте, если уж что в голову придет...

Прикладываю текстовый файл из модуля, там описывается код модуля и что куда...

Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся.
Добавляем метод в класс Variants. Получаем весь список вариантов товаров по заданным параметрам (индексы продуктов).
Я всё думаю, что именно тут скрывается баг... так как stock' как раз кол-во варианта товара, из таблицы s_variants, по умолчанию он NULL (50), но если проставиться 0, то как раз возникает данная ситуация.
Код:
if(!empty($filter['in_stock']) && $filter['in_stock'])
$instock_filter = $this->db->placehold('AND (v.stock>0 OR v.stock IS NULL)');

Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
Тут тоже есть in_stock_filter Думал может в нем проблема...
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся

Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся

Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся

Больше ничего не менялось, все отлично работает, кроме этого бага с кол-вом
 

Вложения

  • Фильтр по вариантам и цене + мультифильтр.txt
    11 KB · Просмотры: 33
Для просмотра ссылки Войди или Зарегистрируйся - вот пока писал, вы прокомментировали)) Да да именно там я менял и ставил условия и что только не делал)
 
  • Заблокирован
  • #5
попробуйте заменить
PHP:
if(!empty($filter['in_stock']))
на
PHP:
if(isset($filter['in_stock']))
Функция empty считает $filter['in_stock'] = 0 также пустым значением, поэтому и не отрабатывает. В этом плане функция isset определяет наличие самого значения фильтр и отрабатывает.
 
Да я это пробовал isset, и еще раз сейчас проверил, неа (
Код:
  if(isset($filter['in_stock']) && $filter['in_stock'])
           $instock_filter = $this->db->placehold('AND (v.stock>0 OR v.stock IS NULL)');

вообще не уверен что это вообще срабатывает так как instock_filter присваиваю любой бред и ничего не меняется в работе...
 
  • Заблокирован
  • #7
может CTRL+F5 и очистка кэша поможет?
 
да был бы рад)))) Я тут комплейтед все папки от паранои уже каждый раз чищю, и у меня в мозиле ctr+r чиститься, это не помогает(
 
  • Заблокирован
  • #9
хз давай в личку, самому интересно стало
 
УРА! Совместными усилиями! Мы нашли проблему: для исправления бага в api/variants. Оказалось все как всегда просто!
Код:
вместо

$query = $this->db->placehold("SELECT v.name
                   FROM __variants AS v
                   WHERE
                   v.name <> ''
                   $product_id_filter              
                   $instock_filter
                   GROUP BY v.name              
                   ");

заменить на
$query = $this->db->placehold("SELECT v.name
                   FROM __variants AS v
                   WHERE
                   v.name <> ''
                   $product_id_filter              
                   AND (v.stock>0 OR v.stock IS NULL)
                   GROUP BY v.name              
                   ");

так как конструкция не отрабатывает свое и с isset тоже
if(!empty($filter['in_stock']) && $filter['in_stock'])
           $instock_filter = $this->db->placehold('AND (v.stock>0 OR v.stock IS NULL)');

Но это решает проблему если вариант один у одного товара, т.е. скрывается только вариант в фильтре, а не товар. Не работает, если у нас 2 товара с одинаковыми названиями вариантов, и у одного будет 0 кол-во варианта, то фильтр покажет все равно оба :((( да чтож такое((
 
Последнее редактирование:
Назад
Сверху