shoma

Поиск товара с русским названием

Рекомендуемые сообщения

shoma    182

Большая част товаров на моем сайте имеет русские имена :roll: с ужасом обнаружил что движковый поисковик их не ищет :)( подскажите решение как поправить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
babushka    101

Большая част товаров на моем сайте имеет русские имена :roll: с ужасом обнаружил что движковый поисковик их не ищет :)( подскажите решение как поправить?

Какя версия движка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
shoma    182

версию 1.4.4 rus 0.1 вот по этой ссылке viewtopic.php?f=3&t=179Пробую данный движок первый раз, так что подумал что она последняя рабочая :roll:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
l.slava    5

Данная проблема решается изменением в структуре базы данных product и product_description:Кодировки таблицы нужно изменить с CHARSET=utf8 COLLATE=utf8_binнаCHARSET=utf8 COLLATE=utf8_general_ci А также в файле:catalog/model/catalog/product.phpУдаления sql функции LCASEНайти:$sql .= " AND LCASE(pd.name)заменить$sql .= " AND (pd.name Для поиска в админке файл: admin/model/catalog/product.phpПосле этого поиск работает.Но я бы еще и поиск переделал бы: например если в поиске вводят 2 и более слова (больше 3 символов), я бы сделал поиск по каждому слову отдельно. Результат был бы еще качественнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
cashfile    12

Данная проблема решается изменением в структуре базы данных product и product_description:Кодировки таблицы нужно изменить с CHARSET=utf8 COLLATE=utf8_binнаCHARSET=utf8 COLLATE=utf8_general_ci А также в файле:catalog/model/catalog/product.phpУдаления sql функции LCASEНайти:$sql .= " AND LCASE(pd.name)заменить$sql .= " AND (pd.name Для поиска в админке файл: admin/model/catalog/product.phpПосле этого поиск работает.Но я бы еще и поиск переделал бы: например если в поиске вводят 2 и более слова (больше 3 символов), я бы сделал поиск по каждому слову отдельно. Результат был бы еще качественнее.

А не думал чтобы поиск ещё был по артикулам ??? ... в 1.4.0 его тоже нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
shoma    182

Данная проблема решается изменением в структуре базы данных product и product_description:Кодировки таблицы нужно изменить с CHARSET=utf8 COLLATE=utf8_binнаCHARSET=utf8 COLLATE=utf8_general_ci А также в файле:catalog/model/catalog/product.phpУдаления sql функции LCASEНайти:$sql .= " AND LCASE(pd.name)заменить$sql .= " AND (pd.name Для поиска в админке файл: admin/model/catalog/product.phpПосле этого поиск работает.Но я бы еще и поиск переделал бы: например если в поиске вводят 2 и более слова (больше 3 символов), я бы сделал поиск по каждому слову отдельно. Результат был бы еще качественнее.

к сожалению не помогло :(бд имеет кодировку utf8_general_ci в catalog/model/catalog/product.php изменил, но так же не хочет русский распознавать. на английском ищет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
l.slava    5

проверьте точно что вы точно удалили catalog/model/catalog/product.phpУдаления sql функции LCASEНайти:$sql .= " AND LCASE(pd.name)заменить$sql .= " AND (pd.nameДля поиска в админке файл: admin/model/catalog/product.phpПоиск точно зависит от этих строк.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
shoma    182

$sql .= " AND (pd.nameточно верно?$sql .= " AND (pd.name)я в конце скобку закрыл иначе ошибка выходит. нет не помогает. последняя версия движка

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
MACTEP    0

В 1.4.7 эта строка $sql .= " AND (pd.name не находится вообще.

зато есть вот такие строки $sql .= " AND (LCASE(pd.name), но их замена ни к чему не приводит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
shoma    182

я поставил OpenCart 1.4.7 RUS 0.2 и ocStore v0.1.1-dev там проблем с поиском нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
MACTEP    0

У меня стоит v1.4.7 RUS v0.3 и не ищет русский текст вообщеКстати, а где взял osStore? Хотелось бы посмотреть на него :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
shoma    182

нет я про то что v1.4.7 RUS v0.2 распознает русский

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
cashfile    12

нет я про то что v1.4.7 RUS v0.2 распознает русский

Почему тогда это потерялось в RUS v0.3 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
MACTEP    0

Установил v1.4.7 RUS v0.2 тоже не ищет на русском

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Rompez    0

решение для 1.4.7 у кого не работает поиск по русскому названию товаров.

в файлах:

../catalog/module/catalog/product.php - для поиска на главной странице сайта

../admin/module/catalog/product.php - для поиска товаров в админке

найти функции:

LCASE и strtolower
и удалить. Скобки не трогайте, а то запутаетесь(у гуру не отностится :) ). Просто удалите эти слова.

например было:

...$sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%'";...
должно стать после редактирования:

...$sql .= " AND ((pd.name) LIKE '%" . $this->db->escape(($keyword)) . "%' OR (pd.description) LIKE '%" . $this->db->escape(($keyword)) . "%'";...
и так для каждой строки с этими функциями в каждом их вышеперечисленных файлов.

Кодировка базы данных соответственно должна быть utf8_General_Ci, т.к. регистр не преобразуется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
19th    212

Для тех, кто использует модуль "аякс поиска" не забудьте также поправить файл

catalog/controller/product/search.php
Там один раз тоже встречается strtolower

Кстати вариант от Rompez работает и для 1.4.8b

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
shoputils    269

Проблема уже поднималась на форуме. Вот тут(https://opencartforum.com/viewtopic.php?f=15&t=191). Но решение ее мне не понравилось, там удаляют чувствительность к регистру букв и если ты искал товар по слову "фотография", то товары с названием "Фотография" просто не будут найдены.

Проблему поиска решить можно проще:

Таблицы в БД хранятся в UFT-8. Сам движок тоже в UTF-8 и все запросы к БД (для запроса имени, описания и прочих локализованных полей), соответсвенно, тоже в UTF-8. Поэтому необходимо забыть про функцию strtolower во всех частях кода, а именно в админке (поиск товара), ну во фронтенде тоже. Так как strtolower не работает с UTF-8 никак (англицкие символы прокатят, а вот поиск по любым другим просто работать в движке не будет) почитать можно тут: http://php.net/manual/en/function.strtolower.php. В документации есть куча примеров как использовать эту функцию. Если бы таблицы были бы в кодировке cp1251 и сам сайт в этой же кодировке, то можно было бы вызвать функцию setlocale(LC_ALL, 'ru_RU'); и поиск работал бы на ура. А для UTF-8 нужно заменить хотябы в двух файлах:

adminmodelcatalogproduct.php и catalogmodelcatalogproduct.php вызов функции strtolower('text') на mb_strtolower('text', 'UTF-8'). Поиск заработает прекрасно.

Теперь про сортировку:

Чтобы сортировка заработала верно, необходимо всего-лишь создать базу данных с параметром: CHARSET=utf8 COLLATE=utf8_general_ci, тогда все таблицы будут работать именно с COLLATE=utf8_general_ci - сравнение (сопоставление) букв будет именно для русского алфавита.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Semirina7    0

решение для 1.4.7 у кого не работает поиск по русскому названию товаров.

в файлах:

../catalog/module/catalog/product.php - для поиска на главной странице сайта

../admin/module/catalog/product.php - для поиска товаров в админке

найти функции:

LCASE и strtolower
и удалить. Скобки не трогайте, а то запутаетесь(у гуру не отностится :( ). Просто удалите эти слова.

например было:

...$sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%'";...
должно стать после редактирования:

...$sql .= " AND ((pd.name) LIKE '%" . $this->db->escape(($keyword)) . "%' OR (pd.description) LIKE '%" . $this->db->escape(($keyword)) . "%'";...
и так для каждой строки с этими функциями в каждом их вышеперечисленных файлов.

Кодировка базы данных соответственно должна быть utf8_General_Ci, т.к. регистр не преобразуется.

Спасибо огромное, мне тоже это помогло!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
KoooT    1

Добрый день. Кто нибудь смог реализовать нормальный "регистрозависимый русский" поиск в версии opencart 4.8b? shoputils предлагает вроде правильное решение, но оно не для 4.8b. Кто нашел решение поделитесь пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
19th    212

Если под регистрозависимым поиском подразумевается что при запросе "Продукт" выдается "продукт", то у меня под 1.4.8b все спокойно ищется

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
KoooT    1

Да, вы меня правильно поняли. Ваш ответ натолкнул на мысль что моя проблема кроется в кодировке базы данных. Посмотрел - так оно и есть. Таблицы были в utf8 binary - конвертнул в utf8_general_ci и все заработало. Спасибо за внимание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
TimTam    2

Правильно ли я понял слово «конвертнул»идем в пхпмайадмин и у двух таблиц продукт и продукт дескрипшен меняем кодировку на utf8_general_ciпросто меняем?Или надо произвести какие то операции по перекодировке?С уважениемЗЫ потому как не смог добиться данным шагом работы поиска

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

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