Автор Тема: Поиск товара по артикулу presta 1.5.6.2  (Прочитано 288 раз)

22 Декабря 2014, 01:37:05
  • Новичок
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Подскажите пожалуйста с поиском, весь интернет облазил и ничего не помогает.

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

То есть бывает артикул очень длинный, и чтобы преста чтобы что то нашла нужно вводить с начала артикул, а я хочу чтобы он находил по 3 или 4 цифрам или буквам в артикуле, без разницы где бы они не находились в начале артикула или в конце.

Номер престы 1.5.6.2.
22 Декабря 2014, 13:17:38
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 1012
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Переделать нужно будет функцию find в классе Search. Но проблема будет в создании индексов. В стандарте поиск идет по индексам, для создания индексов берутся только первые символы. Если создавать индексы из всех возможных сочетаний, то базы будет очень большого размера. Для такого поиска нужен будет мощный сервер. 
22 Декабря 2014, 16:57:05
Ответ #2
  • Новичок
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Переделать нужно будет функцию find в классе Search. Но проблема будет в создании индексов. В стандарте поиск идет по индексам, для создания индексов берутся только первые символы. Если создавать индексы из всех возможных сочетаний, то базы будет очень большого размера. Для такого поиска нужен будет мощный сервер.
Я так понял класс find в classes/search.php?

Помоги если можешь, что мне переделать. С меня на пиво, или сколько скажешь.
24 Декабря 2014, 18:50:27
Ответ #3
  • Новичок
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Я нашел решение, кому интересно делюсь.
Редактируем /classes/search.php

$intersect_array[] = 'SELECT si.id_product
    FROM '._DB_PREFIX_.'search_word sw
LEFT JOIN '._DB_PREFIX_.'search_index si ON sw.id_word = si.id_word
    WHERE sw.id_lang = '.(int)$id_lang.'
    AND sw.id_shop = '.$context->shop->id.'
    AND sw.word LIKE
    '.($word[0] == '-'
    ? ' \'%'.pSQL(Tools::substr($word, 1, PS_SEARCH_MAX_WORD_LENGTH)).'%\''
: '\'%'.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\''
);