UMIhelp
Разработка сайта на UMI.CMS => Макросы UMI.CMS => Тема начата: Cubes от 28 Мая 2015, 15:01:04
-
Здравствуйте! Возникла проблема следующего характера: имеется фильтр по каталогу, одно из полей "Название", допустим один из объектов каталога содержит довольно длинную фразу в данном поле (например: "Супер тонкий телевизор"). Если вписать в фильтре в поле "Название" фразу "Телевизор тонкий", то ничего найдено не будет, так как фильтр ищет точное совпадение. Что в этом случае можно сделать? Можно ли реализовать, чтобы фильтр работал по частичному совпадению, т.е. по запросу "тонкие телевизоры" было что-то найдено? Спасибо!
-
Забыл упомянуть, используется tpl.
-
Отвечу сам на свой вопрос. При фильтрации формируются параметры в url: ?fields_filter["название поля"]="текст". Если в поисковой фразе есть пробелы, они заменяются на +. Например фраза: "Супер тонкий телевизор", будет в url "Супер+тонкий+телевизор". Фильтрация по текстовому полю осуществляются с помощью атрибута "Like" (т.е. ищем входит ли наша подстрока в целую строку), поэтому если искать "Супер телевизор", а в базе целая строка - "Супер тонкий телевизор", найдено ничего не будет! Поэтому нужно заменить пробел(+) на %(любое кол-во символов).
Если средствами js, то : .value.replace(new RegExp(" ",'g'),"%").
Остается проблема с порядком слов, т.е. если написать "телевизор тонкий", то поиск ничего не даст. Здесь уже надо переписывать сам метод фильтрации, как и в случае с частичным совпадением.
-
на своей практике, поиск по названию всегда выносим в отдельный поиск (на основе модуля search) и при необходимости переписываем данную функцию, для добавления немного морфологии в логике поиска.
P.S. То есть, в фильтре ищем только по полям типа выпадающий список, галочка, число, а строка уже отдельным функционалом