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

Фильтр по названию товара в админке


Recommended Posts

Всем привет.

Обратил внимание, что в админке не работает с кириллицей фильтр по наименованию товара. То есть всё что забито латинскими буквами фильтрует, а на все запросы в кириллице - Нет данных!

Кто-нибудь знает как исправить?

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


В общем опять же получилось решить проблему самому, выкинув из "admin/model/catalog/product.php" функцию "strtolower()". Теперь вроде всё работает :rolleyes:

Для правильной работы с кириллицей фильтра по названию товара в двух местах находим:

$sql .= " AND LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($data['filter_name'])) . "%'";
Изменяем на:

$sql .= " AND LCASE(pd.name) LIKE '%" . $this->db->escape($data['filter_name']) . "%'";

То же самое я на всякий случай проделал и со следующими строчками:

$sql .= " AND LCASE(p.model) LIKE '%" . $this->db->escape(strtolower($data['filter_model'])) . "%'";
$sql .= " AND LCASE(p.price) LIKE '" . $this->db->escape(strtolower($data['filter_price'])) . "%'";
$query = $this->db->query("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') . "' AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%' OR LCASE(p.model) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%')");

Я далеко не спец в PHP, но вроде всё работает.

Поправьте меня если что не так!

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


Правильнее будет заменить strtolower на mb_strtolower.

Это из-за кодировки проблемы. Будет выглядеть вот так:

mb_strtolower($data['filter_price'], 'UTF-8')

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


Правильнее будет заменить strtolower на mb_strtolower

Подскажите пожалуйста, какие могут возникнуть проблемы в моём случае? Стоит ли менять или всё же можно оставить так, как я уже сделал?
Надіслати
Поділитися на інших сайтах


Подскажите пожалуйста, какие могут возникнуть проблемы в моём случае? Стоит ли менять или всё же можно оставить так, как я уже сделал?

Ну, если все работает, то это хорошо :)

Просто данные функции приводили строку к нижнему регистру, то же выполнялось и со строками в базе данных, а затем ищутся совпадения. Но если все работает - не заморачивайтесь) Это не так страшно.

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


Поправьте меня если что не так!

Если речь идёт о ocStore то правильнее менять так

$sql .= " AND LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($data['filter_name'])) . "%'";
Изменяем на:

$sql .= " AND pd.name LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
Надіслати
Поділитися на інших сайтах

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

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

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

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

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

Вхід

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

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

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

×
×
  • Створити...

Important Information

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