megauser Опубликовано 20 января, 2020 Жалоба Поделиться Опубликовано 20 января, 2020 Друзья, натолкните на мысль куда смотреть? Установил ajax фильтр по инструкции, собственно много лет он работал как я думал нормально. Но вчера обновляя библиотеки заметил глюк, http://efimof.bget.ru/catalog/mobilnye-telefony Если цена хотя бы одно товара 0 , то при движении ползунка (Максимальной цены) фильтрация не проиходит. А вот если подвигать слева ползунок, то все считать с обеих сторон начинает.Специально нашел архив который был при покупке чтоб поглядеть, тут такая же проблема. Слева оставляю 0 , а тяну справа полнузок на 3 тысячи например, и ничего не происходит. Цитата Ссылка на сообщение Поделиться на другие сайты
alexivchenko Опубликовано 20 января, 2020 Жалоба Поделиться Опубликовано 20 января, 2020 Друзья, натолкните на мысль куда смотреть? Установил ajax фильтр по инструкции, собственно много лет он работал как я думал нормально. Но вчера обновляя библиотеки заметил глюк, http://efimof.bget.ru/catalog/mobilnye-telefony Если цена хотя бы одно товара 0 , то при движении ползунка (Максимальной цены) фильтрация не проиходит. А вот если подвигать слева ползунок, то все считать с обеих сторон начинает.Специально нашел архив который был при покупке чтоб поглядеть, тут такая же проблема. Слева оставляю 0 , а тяну справа полнузок на 3 тысячи например, и ничего не происходит. Укажите ссылку на архив вашего ajax фильтра, чтобы понимать развернуть и понять причину. Так сразу могу сказать, что новая библиотека выдает вам сообщение "Синхронный XMLHttpRequest в основном потоке не рекомендуется из-за его пагубных последствий для конечного пользователя. Для получения дополнительной помощи, проверьте", а именно в http://efimof.bget.ru/design/default/js/ajax_filter.js Цитата Ссылка на сообщение Поделиться на другие сайты
Flexcore Опубликовано 20 января, 2020 Жалоба Поделиться Опубликовано 20 января, 2020 Когда-то сам Пикусов перепутал empty и isset.Начните с основ. Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 21 января, 2020 Жалоба Поделиться Опубликовано 21 января, 2020 Скорее всего, причина в мелкой ошибочке в api/Products.php или view/ProductsView.php, вроде той, про которую говорит Flexcore. Цитата Ссылка на сообщение Поделиться на другие сайты
Flexcore Опубликовано 21 января, 2020 Жалоба Поделиться Опубликовано 21 января, 2020 Скорее всего, причина в мелкой ошибочке в api/Products.php или view/ProductsView.php, вроде той, про которую говорит Flexcore.Пишет, не говорит.Всё верно, ошибка банальная, которую всё чаще и чаще допускают неопытные программисты. Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 21 января, 2020 Жалоба Поделиться Опубликовано 21 января, 2020 Пишет, не говорит. Одно из значений слова 'говорить' - Высказывать что-л. печатно, письменно. https://slovar.cc/rus/efremova-tolk/275785.html Цитата Ссылка на сообщение Поделиться на другие сайты
megauser Опубликовано 21 января, 2020 Автор Жалоба Поделиться Опубликовано 21 января, 2020 Скорее всего, причина в мелкой ошибочке в 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 эффекта нету. Цитата Ссылка на сообщение Поделиться на другие сайты
Flexcore Опубликовано 21 января, 2020 Жалоба Поделиться Опубликовано 21 января, 2020 Я же вам написал начните с основ, толку от ваших гаданий ну никакого! Также лучше использовать оператор BETWEEN в SQL запросах. Цитата Ссылка на сообщение Поделиться на другие сайты
megauser Опубликовано 21 января, 2020 Автор Жалоба Поделиться Опубликовано 21 января, 2020 Я же вам написал начните с основ, толку от ваших гаданий ну никакого!Также лучше использовать оператор BETWEEN в SQL запросах. Куда к основам? то что выше написал код правильный? или есть ошибка? Если не сложно укажите на нее. Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 21 января, 2020 Жалоба Поделиться Опубликовано 21 января, 2020 Ошибок предостаточно. Например, условие в строке if(!empty($filter['price_first']) && !empty($filter['price_last'])) ложно, если цена в фильтре нулевая. Соответственно параметры по фильтру цену не передаются и оттого не работает... Цитата Ссылка на сообщение Поделиться на другие сайты
Flexcore Опубликовано 21 января, 2020 Жалоба Поделиться Опубликовано 21 января, 2020 Куда к основам? то что выше написал код правильный? или есть ошибка? Если не сложно укажите на нее.http://forum.simplacms.ru/topic/14539-продолжение-проблемы-с-мультифильтром/?p=113235 Цитата Ссылка на сообщение Поделиться на другие сайты
megauser Опубликовано 21 января, 2020 Автор Жалоба Поделиться Опубликовано 21 января, 2020 Ошибок предостаточно. Например, условие в строке 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. Цитата Ссылка на сообщение Поделиться на другие сайты
Flexcore Опубликовано 21 января, 2020 Жалоба Поделиться Опубликовано 21 января, 2020 Это да, прочитал что 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.Эврика! Цитата Ссылка на сообщение Поделиться на другие сайты
megauser Опубликовано 21 января, 2020 Автор Жалоба Поделиться Опубликовано 21 января, 2020 Эврика! Нокстер хоть вы и предельно вежливы, но я вас узнал) Цитата Ссылка на сообщение Поделиться на другие сайты
Flexcore Опубликовано 21 января, 2020 Жалоба Поделиться Опубликовано 21 января, 2020 (изменено) Нокстер хоть вы и предельно вежливы, но я вас узнал)Мимо, я Архимед Изменено 21 января, 2020 пользователем Flexcore Цитата Ссылка на сообщение Поделиться на другие сайты
megauser Опубликовано 21 января, 2020 Автор Жалоба Поделиться Опубликовано 21 января, 2020 Мимо, я Архимед Странно-) ну ок, спасибо что помог. Цитата Ссылка на сообщение Поделиться на другие сайты
Flexcore Опубликовано 21 января, 2020 Жалоба Поделиться Опубликовано 21 января, 2020 Странно-) ну ок, спасибо что помог.Вы сами себе помогли, я лишь подтолкнул в верное направление. Цитата Ссылка на сообщение Поделиться на другие сайты
megauser Опубликовано 24 января, 2020 Автор Жалоба Поделиться Опубликовано 24 января, 2020 Эврика! if(isset($filter['price_first']) && !empty($filter['price_last'])) Ошибся, при данной конструкции почему то та же проблема в фильтрации. Хотя вроде функция isset не должна вернуть false Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 24 января, 2020 Жалоба Поделиться Опубликовано 24 января, 2020 Ошибся, при данной конструкции почему то та же проблема в фильтрации. Хотя вроде функция isset не должна вернуть false Ошибок предостаточно. Например... Надо ж проверять детально все шаги и все места. Особенно если код у Вас левый неизвестно откуда взятый. Вы ж не обратились к автору сего произведения... А похожая ошибка в предоставленном Вами коде видна сразу, если хоть чуть внимательно смотреть... Цитата Ссылка на сообщение Поделиться на другие сайты
megauser Опубликовано 24 января, 2020 Автор Жалоба Поделиться Опубликовано 24 января, 2020 Надо ж проверять детально все шаги и все места. Особенно если код у Вас левый неизвестно откуда взятый. Вы ж не обратились к автору сего произведения... А похожая ошибка в предоставленном Вами коде видна сразу, если хоть чуть внимательно смотреть... Модуль был куплен в 2013 году, собственно когда и сайт был сделан еще на версии 2.1.5, где спустя 7 лет искать разработчика. Если не сложно, укажите на ошибку. Цитата Ссылка на сообщение Поделиться на другие сайты
megauser Опубликовано 24 января, 2020 Автор Жалоба Поделиться Опубликовано 24 января, 2020 (изменено) Надо ж проверять детально все шаги и все места. Особенно если код у Вас левый неизвестно откуда взятый. Вы ж не обратились к автору сего произведения... А похожая ошибка в предоставленном Вами коде видна сразу, если хоть чуть внимательно смотреть... 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. Спасибо, разобрался. Изменено 24 января, 2020 пользователем megauser Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.