Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Гість

Recommended Posts

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

Надіслати
Поділитися на інших сайтах

Данная проблема решается изменением в структуре базы данных 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 символов), я бы сделал поиск по каждому слову отдельно. Результат был бы еще качественнее.

Надіслати
Поділитися на інших сайтах


Данная проблема решается изменением в структуре базы данных 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 его тоже нет
Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

Данная проблема решается изменением в структуре базы данных 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 изменил, но так же не хочет русский распознавать. на английском ищет
Надіслати
Поділитися на інших сайтах

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

Надіслати
Поділитися на інших сайтах


  • 4 weeks later...
  • 4 weeks later...

решение для 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, т.к. регистр не преобразуется.

Надіслати
Поділитися на інших сайтах


  • 4 weeks later...

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

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

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

Надіслати
Поділитися на інших сайтах


  • 1 month later...

Проблема уже поднималась на форуме. Вот тут(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 - сравнение (сопоставление) букв будет именно для русского алфавита.

Надіслати
Поділитися на інших сайтах

решение для 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, т.к. регистр не преобразуется.

Спасибо огромное, мне тоже это помогло!!!
Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

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

Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

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

Надіслати
Поділитися на інших сайтах


Как делал я. Если посмотреть в скачанном дистрибутиве у меня (opencart_1.4.8b_rus_0.1uploadinstall) файл opencart.sql в блокноте, то вы увидите примерно такой код:

CREATE TABLE `oc_address` (  `address_id` int(11) NOT NULL AUTO_INCREMENT,  `customer_id` int(11) NOT NULL,  `company` varchar(32) COLLATE utf8_bin NOT NULL,  `firstname` varchar(32) COLLATE utf8_bin NOT NULL DEFAULT '',  `lastname` varchar(32) COLLATE utf8_bin NOT NULL DEFAULT '',
Как видите кодировка создается utf8_bin. Я заменил все utf8_bin в дампе на utf8_unicode_ci. После чего, удалил все таблицы из базы данных и сделал импорт в базу данных уже исправленного файла opencart.sql в правильной кодировке, как следствие база и таблицы стали utf8_unicode_ci и заработал поиск. Кстати ocstore_v0.1.0 таблицы сразу создаются в правильной кодировке.
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.