Перейти к содержимому


Фото
- - - - -

Продолжение проблемы с мультифильтром


  • Чтобы отвечать, сперва войдите на форум
19 ответов в теме

#1 megauser

megauser
  • Пользователь
  • 140 сообщений
  • Дизайн, Заказчик, Пользователь
  • Откуда:Россия

Опубликовано 20.01.2020 - 21:55

Друзья, натолкните на мысль куда смотреть? 

 

Установил ajax фильтр по инструкции, собственно много лет он работал как я думал нормально. Но вчера обновляя библиотеки заметил глюк, 

 

http://efimof.bget.r...bilnye-telefony

 

Если цена хотя бы одно товара 0 , то при движении ползунка (Максимальной цены) фильтрация не проиходит. 

А вот если подвигать слева ползунок, то все считать с обеих сторон начинает.

Специально нашел архив который был при покупке чтоб поглядеть, тут такая же проблема.

 

Слева оставляю 0 , а тяну справа полнузок на 3 тысячи например, и ничего не происходит.



#2 alexivchenko

alexivchenko
  • Пользователь
  • 148 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Курск

Опубликовано 20.01.2020 - 22:43

Друзья, натолкните на мысль куда смотреть? 

 

Установил ajax фильтр по инструкции, собственно много лет он работал как я думал нормально. Но вчера обновляя библиотеки заметил глюк, 

 

http://efimof.bget.r...bilnye-telefony

 

Если цена хотя бы одно товара 0 , то при движении ползунка (Максимальной цены) фильтрация не проиходит. 

А вот если подвигать слева ползунок, то все считать с обеих сторон начинает.

Специально нашел архив который был при покупке чтоб поглядеть, тут такая же проблема.

 

Слева оставляю 0 , а тяну справа полнузок на 3 тысячи например, и ничего не происходит.

 

Укажите ссылку на архив вашего ajax фильтра, чтобы понимать развернуть и понять причину. 

Так сразу могу сказать, что новая библиотека выдает вам сообщение "Синхронный XMLHttpRequest в основном потоке не рекомендуется из-за его пагубных последствий для конечного пользователя. Для получения дополнительной помощи, проверьте", а именно в http://efimof.bget.r.../ajax_filter.js



#3 Flexcore

Flexcore
  • Забаненный
  • 67 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 21.01.2020 - 02:49

Когда-то сам Пикусов перепутал empty и isset.
Начните с основ.

#4 phukortsin

phukortsin
  • Фрилансер
  • 1 077 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 21.01.2020 - 09:43

Скорее всего, причина в мелкой ошибочке в api/Products.php или view/ProductsView.php,  вроде той, про которую говорит Flexcore.



#5 Flexcore

Flexcore
  • Забаненный
  • 67 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 21.01.2020 - 10:27

Скорее всего, причина в мелкой ошибочке в api/Products.php или view/ProductsView.php, вроде той, про которую говорит Flexcore.

Пишет, не говорит.
Всё верно, ошибка банальная, которую всё чаще и чаще допускают неопытные программисты.

#6 megauser

megauser
  • Пользователь
  • 140 сообщений
  • Дизайн, Заказчик, Пользователь
  • Откуда:Россия

Опубликовано 21.01.2020 - 13:05

Скорее всего, причина в мелкой ошибочке в api/Products.php или view/ProductsView.php,  вроде той, про которую говорит Flexcore.

 

 

в Api /Products 

 

        if(!empty($filter['price_first']) && !empty($filter['price_last']))
        {
            $price_filter_join = $this->db->placehold('LEFT JOIN __variants pv ON pv.product_id = p.id');
            $price_filter_where = $this->db->placehold(' AND (pv.price = NULL OR pv.price >= ? AND pv.price <= ? ) ', (int)$filter['price_first'], (int)$filter['price_last'] );
        }

если смотреть аналогичные фильтры рядом, то они все так проверяются.

 

в ProductsView.php 

 

        if($this->request->get("price_search"))
        {
            // Если задана максимальная цена
            $price_last = $this->request->get('price_last');
            if (!empty($price_last) && $price_last != 'undefined')
            {
                $filter['price_last'] = (int)$price_last;
                $this->design->assign('price_last', $filter['price_last']);
            }

            // Если задана минимальная цена
            $price_first = $this->request->get('price_first');
            if (!empty($price_first) && $price_first != 'undefined')
            {
                $filter['price_first'] = (int)$price_first;
                if (isset($filter['price_last']) && $filter['price_first'] > $filter['price_last'])
                    $filter['price_first'] = 0;
                $this->design->assign('price_first', $price_first);
            }
        }

Но тут есть isset , но при замене на !empty эффекта нету.



#7 Flexcore

Flexcore
  • Забаненный
  • 67 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 21.01.2020 - 13:17

Я же вам написал начните с основ, толку от ваших гаданий ну никакого!
Также лучше использовать оператор BETWEEN в SQL запросах.

#8 megauser

megauser
  • Пользователь
  • 140 сообщений
  • Дизайн, Заказчик, Пользователь
  • Откуда:Россия

Опубликовано 21.01.2020 - 13:32

Я же вам написал начните с основ, толку от ваших гаданий ну никакого!
Также лучше использовать оператор BETWEEN в SQL запросах.

 

Куда к основам? то что выше написал код правильный? или есть ошибка? Если не сложно укажите на нее.



#9 phukortsin

phukortsin
  • Фрилансер
  • 1 077 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 21.01.2020 - 13:47

Ошибок предостаточно. Например, условие в строке

 

if(!empty($filter['price_first']) && !empty($filter['price_last']))

 

ложно, если цена в фильтре нулевая. Соответственно параметры по фильтру цену не передаются и оттого не работает...



#10 Flexcore

Flexcore
  • Забаненный
  • 67 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 21.01.2020 - 13:47

Куда к основам? то что выше написал код правильный? или есть ошибка? Если не сложно укажите на нее.

http://forum.simplac...ьтром/?p=113235

#11 megauser

megauser
  • Пользователь
  • 140 сообщений
  • Дизайн, Заказчик, Пользователь
  • Откуда:Россия

Опубликовано 21.01.2020 - 14:46

Ошибок предостаточно. Например, условие в строке

 

if(!empty($filter['price_first']) && !empty($filter['price_last']))

 

ложно, если цена в фильтре нулевая. Соответственно параметры по фильтру цену не передаются и оттого не работает...

 

Это да, прочитал что empty 0 обозначает как пустое значение.

 

По факту отлично работает конструкция 

 

        if(isset($filter['price_first']) && !empty($filter['price_last']))
        {
            $price_filter_join = $this->db->placehold('LEFT JOIN __variants pv ON pv.product_id = p.id');
            $price_filter_where = $this->db->placehold(' AND (pv.price = NULL OR pv.price >= ? AND pv.price <= ? ) ', (int)$filter['price_first'], (int)$filter['price_last'] );
        }

Где минимальное прайс проверяется наличие переменной значением от null.



#12 Flexcore

Flexcore
  • Забаненный
  • 67 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 21.01.2020 - 16:26

Это да, прочитал что empty 0 обозначает как пустое значение.

По факту отлично работает конструкция

        if(isset($filter['price_first']) && !empty($filter['price_last']))
        {
            $price_filter_join = $this->db->placehold('LEFT JOIN __variants pv ON pv.product_id = p.id');
            $price_filter_where = $this->db->placehold(' AND (pv.price = NULL OR pv.price >= ? AND pv.price <= ? ) ', (int)$filter['price_first'], (int)$filter['price_last'] );
        }
Где минимальное прайс проверяется наличие переменной значением от null.
Эврика!

#13 megauser

megauser
  • Пользователь
  • 140 сообщений
  • Дизайн, Заказчик, Пользователь
  • Откуда:Россия

Опубликовано 21.01.2020 - 16:27

Эврика!

 

:D Нокстер хоть вы и предельно вежливы, но я вас узнал)



#14 Flexcore

Flexcore
  • Забаненный
  • 67 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 21.01.2020 - 16:27


:D Нокстер хоть вы и предельно вежливы, но я вас узнал)

Мимо, я Архимед

Изменено: Flexcore, 21.01.2020 - 16:31


#15 megauser

megauser
  • Пользователь
  • 140 сообщений
  • Дизайн, Заказчик, Пользователь
  • Откуда:Россия

Опубликовано 21.01.2020 - 16:41

Мимо, я Архимед

 

Странно-) ну  ок, спасибо что помог.



#16 Flexcore

Flexcore
  • Забаненный
  • 67 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 21.01.2020 - 16:48


Странно-) ну ок, спасибо что помог.


Вы сами себе помогли, я лишь подтолкнул в верное направление.

#17 megauser

megauser
  • Пользователь
  • 140 сообщений
  • Дизайн, Заказчик, Пользователь
  • Откуда:Россия

Опубликовано 24.01.2020 - 10:30

Эврика!

 

 if(isset($filter['price_first']) && !empty($filter['price_last']))

Ошибся, при данной конструкции почему то та же проблема в фильтрации. Хотя вроде функция isset не должна вернуть false



#18 phukortsin

phukortsin
  • Фрилансер
  • 1 077 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 24.01.2020 - 10:51

Ошибся, при данной конструкции почему то та же проблема в фильтрации. Хотя вроде функция isset не должна вернуть false

 

Ошибок предостаточно. Например...

 

Надо ж проверять детально все шаги и все места. Особенно если код у Вас левый неизвестно откуда взятый. Вы ж не обратились к автору сего произведения...

 

А похожая ошибка в предоставленном  Вами коде видна сразу, если хоть чуть внимательно смотреть...



#19 megauser

megauser
  • Пользователь
  • 140 сообщений
  • Дизайн, Заказчик, Пользователь
  • Откуда:Россия

Опубликовано 24.01.2020 - 10:56

Надо ж проверять детально все шаги и все места. Особенно если код у Вас левый неизвестно откуда взятый. Вы ж не обратились к автору сего произведения...

 

А похожая ошибка в предоставленном  Вами коде видна сразу, если хоть чуть внимательно смотреть...

 

Модуль был куплен в 2013 году, собственно когда и сайт был сделан еще на версии 2.1.5, где спустя 7 лет искать разработчика.

 

Если не сложно, укажите на ошибку.



#20 megauser

megauser
  • Пользователь
  • 140 сообщений
  • Дизайн, Заказчик, Пользователь
  • Откуда:Россия

Опубликовано 24.01.2020 - 13:00

Надо ж проверять детально все шаги и все места. Особенно если код у Вас левый неизвестно откуда взятый. Вы ж не обратились к автору сего произведения...

 

А похожая ошибка в предоставленном  Вами коде видна сразу, если хоть чуть внимательно смотреть...

 

 


isset - проверяет на существование переменной или индекса в массиве, т.е она будет ВСЕГДА true, если значение отлично от NULL, именно от константы null, т.е '', 0, "\0" и т.д, будет считаться существующей переменой, false будет только при присвоение ей null или unset($var), во всех остальных true

empty - проверят именно на пустоту переменной, т.е возвращает true если переменная является пустой и false в противоположном случаи.

 

Исходя из этого 

 

if(isset($filter['price_first']) && !empty($filter['price_last']))

isset($filter['price_first'])       -       возвращает true т.к. переменная не пустая , там 0.

!empty($filter['price_last'])      -     возвращает true т.к. переменная не пустая ( там максимальное значение фильтра)

 

Должно возвращать true && true ,верно? даже если в фильтре price_first - 0.

 

Но при такой конструкции фильтр не срабатывает. Пока 0 в минимальной цене фильтра.

 

 

UPD. Спасибо, разобрался.


Изменено: megauser, 24.01.2020 - 13:13





0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых