[Решено] Поиск по доп.полям товара

Тема в разделе "OpenCart", создана пользователем skiv14, 21 дек 2015.

Статус темы:
Закрыта.
  1. skiv14

    skiv14

    Регистрация:
    9 июн 2015
    Сообщения:
    437
    Симпатии:
    180
    Прошу помощи.

    Суть в чём, есть номера к товару, по ним нужен поиск.

    Номеров несколько, например, к одному товару такие номера:
    33411130617
    443498625

    Всё это занёс в доп.поле SCU. Установлен поиск Isearch, поиск по SCU включён.

    Непосредственно, поиск по сайту находит этот товар если писать с самого начала, т.е. 33 и так далее.
    Если же пробовать найти по этому номеру 443498625, то не находит.

    Поиск по названию товара ищет по любой части названия. А поиск по SCU только с самого начала.
    Как победить ?

    Или, может, как-то по другому решить ?
     
    Последнее редактирование: 21 дек 2015
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Чтоб в SQL запросе искать по вхождению ключевого слова в любом месте текста, запрос должен выглядеть так:
    Код:
    LIKE %поисковый_запрос%
    Символ процента по краям указывает на то, что искомый текст может перед и после себя содержать любые символы.

    А дальше находим в моделе модуля запрос и приводим в нём фрагмент с поиском по sku к вышеуказанному виду. С этим модулем никогда не работал, так что в каком месте править не подскажу.
     
    skiv14 нравится это.
  3. skiv14

    skiv14

    Регистрация:
    9 июн 2015
    Сообщения:
    437
    Симпатии:
    180
    Победил. Как я тебя люблю )))

    Файл catalog/model/catalog/isearch.php

    Код:
    $cond = '';
                    foreach ($words as $word) {
                        if ($searchIn['name'] === true) { $cond .= ' AND (LOWER(pd.name) LIKE "%' . $this->db->escape($word) . '%"'; }
                            else { $cond .= ' AND (1=0'; }
                        if ($searchIn['model'] === true) { $cond .= ' OR LOWER(p.model) LIKE "%' . $this->db->escape($word) . '%"'; }
                        if ($searchIn['sku'] === true) { $cond .= ' OR LOWER(p.sku) LIKE "%' . $this->db->escape($word) . '%"'; } 
    Добавил процент LIKE "%' в строке, относящейся к sku. Поиск начал искать с любого места запроса :Smile:
     
    Последнее редактирование: 21 дек 2015
Статус темы:
Закрыта.