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


Фотография
- - - - -

Фильтр по имени не работает если значение в фильтре начинается с цифры


Лучший Ответ SmetDenis , 05 August 2016 - 15:04

Если в фильтр name передавать число, то он будет искать по ID материала.

Это легаси, осталось из-за поддержки старых версий.

 

Поведение можно убрать вручную в файле

media\zoo\applications\jbuniversal\framework\models\jbmodel.element.itemname.php

6dbz_200x0.png

 

Убрать if совсем, оставить вместо него соответствующий else

 

    protected function _getWhere($value, $exact = 0)
    {
        if (!is_array($value)) {
            $value = array($value);
        }
 
        $where = array();
        foreach ($value as $valueOne) {
            if ((int)$exact) {
                $where[] = 'tItem.name = ' . $this->_db->quote($valueOne);
            } else {
                $valueOne = $this->_prepareValue($valueOne);
                $where[]  = $this->_buildLikeBySpaces($valueOne, 'tItem.name');
            }
        }
 
        return $where;
    }

Параметр exact смущает.
 

Отвечает за точный или полнотекстовый поиск.

Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 8

#1 Lin

Lin

Отправлено 03 August 2016 - 12:14

Например, значение поля по которому ищем: "3 землекопа"

При следующих значениях фильтра:

"3" - не работает

"3 землекопа" - не работает

"землекопа" - работает

Если значение поля "Было 3 землекопа", то:

"3" - не работает

"3 землекопа" - не работает

"землекопа" - работает

"Было 3 землекопа" - работает

 
Автодополнение работает штатно и в выпадающем списке фильтра я необходимые значения вижу.
Фильтрации по другим полям нет.
 

Что это может быть?


Сообщение отредактировал Lin: 04 August 2016 - 09:18

  • 0

#2 Lin

Lin

Отправлено 04 August 2016 - 07:03

Пока накопал только одну закономерность.

Данный эффект наблюдается только с полем "name".

С обычными текстовыми полями все работает штатно. 


  • 0

#3 Lin

Lin

Отправлено 04 August 2016 - 09:04

Нашел отдельную функцию создания where для itemnane. Лежит в jbmodel.element.itemane.php

Логику пока до конца не понял, не хватает опыта. Параметр exact смущает.

Оказывается в поле наименования материала можно искать по id материала. :) Интересная возможность, но могут быть коллизии, если в наименовании часто встречаются цифры.


  • 0

#4 Lin

Lin

Отправлено 04 August 2016 - 09:12

В общем если поиск по id в поле name грохнуть, то все работает просто отлично! Все сразу ищется.

Интересно может это где-то аукнуться?

P.S. Все-таки в определенных условиях и фичи становятся багами. :)


Сообщение отредактировал Lin: 04 August 2016 - 09:31

  • 0

#5 Sliapy

Sliapy

Отправлено 04 August 2016 - 13:39

Поиск по id, как я понимаю, – это поиск по артикулу. По-умолчанию jbzoo price подставляет в артикул именно id материала.

 

Видимо, вы вырезали эту функцию :)

 

Подождите, может разработчики что-то подкажут по вашей проблеме.


  • 0
[color=#aa0000]Не забывайте нажимать кнопку "Вопрос Решён" под сообщением, которое решило Вашу проблему.[/color]

#6 SmetDenis

SmetDenis

Отправлено 05 August 2016 - 15:04   Лучший Ответ

Если в фильтр name передавать число, то он будет искать по ID материала.

Это легаси, осталось из-за поддержки старых версий.

 

Поведение можно убрать вручную в файле

media\zoo\applications\jbuniversal\framework\models\jbmodel.element.itemname.php

6dbz_200x0.png

 

Убрать if совсем, оставить вместо него соответствующий else

 

    protected function _getWhere($value, $exact = 0)
    {
        if (!is_array($value)) {
            $value = array($value);
        }
 
        $where = array();
        foreach ($value as $valueOne) {
            if ((int)$exact) {
                $where[] = 'tItem.name = ' . $this->_db->quote($valueOne);
            } else {
                $valueOne = $this->_prepareValue($valueOne);
                $where[]  = $this->_buildLikeBySpaces($valueOne, 'tItem.name');
            }
        }
 
        return $where;
    }

Параметр exact смущает.
 

Отвечает за точный или полнотекстовый поиск.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#7 Lin

Lin

Отправлено 08 August 2016 - 06:33

Спасибо! Так и сделал.

На другую функциональность эти изменения никак не повлияют?


  • 0

#8 SmetDenis

SmetDenis

Отправлено 08 August 2016 - 08:09

Спасибо! Так и сделал.

На другую функциональность эти изменения никак не повлияют?

 

Нет, не должно. Функция используется только для поиска через фильтр.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#9 Lin

Lin

Отправлено 08 August 2016 - 08:13

Понял. Спасибо!


  • 0




Click to return to top of page in style!