Jump to content

Поиск по части слова. Как?


Recommended Posts

Добрый день!

 

Не получается получить в результатах поиска товары, в артикуле которых содержится поисковый запрос. Если целиком артикул вводить - ищет. В админке ищет по части слова, а на фронтфейсе - нет.

Например: артикул TRA3024. Ищем "3024" - ничего не находим. Ищем "TRA3024" - находим искомый товар.

 

При этом в админке всё спокойно ищется.

 

Преста 1.4.2.5 Модуль поиска родной.

 

Кто-нибуть сталкивался? Хелп! :)

Share this post


Link to post
Share on other sites

Спасибо! Тоже решил улучшить свой фронт-оффис, скопировал выложенный Вами код, но раньше решил проверить, а как у меня ищет? Ввёл полслова "cock" и получил в выдаче все платья, в названии или в описании которых есть слово "cocktail". У меня версия 1.4.8.2. Кажется, у Вас эта же? Ещё версия 1.3.6 — более ранних не знаю — по полслову искала...

Share this post


Link to post
Share on other sites

С поиском начала слова нет никаких проблем. Но по Вашему запросу без предлагаемого переопределения класса не нашлось бы что-то типа "minicocktail".

У меня 1.4.2.5

Share this post


Link to post
Share on other sites

Вот тут у человека еще 1.4.8.2 и оверрайд не помог: http://www.prestashop.com/forums/topic/180406-search-fail-if-the-string-is-a-number/page__pid__891877#entry891877 но такое впечатление, что оригинальный Search.php не той версии, не могли бы Вы глянуть что у Вас в начале файла за Revision написано?

Edited by Mike_AP (see edit history)

Share this post


Link to post
Share on other sites

Есть ещё один вариант, который у меня сработал.

Берём оригинальный Search.php из каталога classes .

Находим вот эти строки:

 

'PS_SEARCH_MINWORDLEN'))

{

$word = str_replace('%', '\\%', $word);

$word = str_replace('_', '\\_', $word);

 

Они гдето после 180 строк находятся.

*********

После этих строк добавляем вот это: (добавляем, а не заменяем!!!!!)

$word ='%'.$word.'%';

 

 

Должен выглядеть вот так:

'PS_SEARCH_MINWORDLEN'))

{

$word = str_replace('%', '\\%', $word);

$word = str_replace('_', '\\_', $word);

$word ='%'.$word.'%';

$intersectArray[] = 'SELECT id_product

FROM '._DB_PREFIX_.'search_word sw

LEFT JOIN '._DB_PREFIX_.'search_index si ON sw.id_word

 

Удачи всем.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More