Владимир
Пользователь
- Сообщения
- 1
- Реакции
- 0
Добрый день! в Магазине на Open Cart 3-0-3-8- поиск на немецком языке находит товары, а на русском языке не находит.
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
1. Проверьте настройки русского языка в админке
Первым делом нужно убедиться, что русский язык установлен и настроен корректно. Иногда проблема кроется в неверных параметрах.
- Перейдите в **Система -> Локализация -> Языки**.
- Найдите и откройте русский язык.
- Сверьте значения, особенно **Locale**, с теми, что рекомендуются для OpenCart. Обычно это: `ru_RU,ru_RU.UTF-8,ru-RU,ru-ru,ru,russian` .
- Убедитесь, что статус языка **Включено**.
2. Проверьте, есть ли у товаров русские переводы
Это самое очевидное, но важное. Если товар был добавлен, когда активным был немецкий язык, его название и описание могли быть сохранены только для немецкого языка.
* Откройте карточку любого товара, который должен находиться по русскому запросу.
* Переключитесь в админке на русский язык и проверьте, заполнены ли поля **Название товара**, **Описание** и **Теги** (мета-теги) для русской версии. Если они пусты — поиск не найдет товар.
3. Самое надежное решение: доработка файлаcatalog/model/catalog/product.php
Если с переводами всё в порядке, а поиск по-прежнему не работает, значит, проблема в логике самого поиска. Стандартный код ищет товары только с привязкой к текущему `language_id`. Вам нужно немного его модифицировать, чтобы он искал по *всем* описаниям товара.
Важно: Все изменения вносятся в файлы модификаций (vqmod, ocmod) или в дочернюю тему, чтобы они не потерялись при обновлении движка. Ниже приведен пример правки для понимания сути.
- Откройте файл `catalog/model/catalog/product.php` (или его модифицированную версию в папке `storage/modification/`).
- Найдите метод `getProducts()`. Внутри него есть основной SQL-запрос, который собирает товары.
- Найдите строку, которая подключает таблицу с описаниями и фильтрует по языку. Выглядит она примерно так:
4. Проблема в условии `WHERE pd.language_id = ...`. Оно жестко привязывает поиск к текущему языку. Чтобы поиск работал по всем языкам, это условие нужно убрать.SQL:LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "'"
5. **Пример того, как можно изменить код:**
* **Было:**
* **Стало (убираем привязку к языку):**SQL:$sql = "SELECT * FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "'";
Здесь `WHERE 1=1` — это просто технический прием, чтобы не нарушить структуру запроса, если дальше будут добавляться другие условия (поиск по словам, фильтры и т.д.) .SQL:$sql = "SELECT * FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE 1=1";
Важно! Таких вхождений в файле может быть несколько, так как поиск может использоваться в разных частях кода. Вам нужно найти и аккуратно поправить их все.