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

Поиск по атрибутам товара


Recommended Posts

Доброго дня.

Я создал атрибуты ширины и высоты в товарах.

Как мне сделать отдельные поля на сайте для ввода значений ширины и высоты, чтобы выдавал результат поиска? Естественно ещё интересует backend. Возможно были подобные темы, но я не нашел.

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


42 минуты назад, AndreyQ сказал:

У вас  на сайте уже есть поля для ввода ширины и  высоты. Чтобы  искать  по  ним  нужно чутка допилить поиск

Эти параметры нужны для расчёта доставки, насколько я понимаю и они не отображаются на сайте.

Теоретически можно поиск допилить и по атрибутам, при этом создав два поля ввода и подписать их.

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


6 минут назад, Microekspert сказал:

Эти параметры нужны для расчёта доставки, насколько я понимаю и они не отображаются на сайте.

Теоретически можно поиск допилить и по атрибутам, при этом создав два поля ввода и подписать их.

есть готовый модуль поиска по атрибутам

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


  • 2 months later...

Начал в итоге сам пытаться сделать.

Думаю как сделать правильный запрос к бд. Таблицу с атрибутами нашёл, поле для ввода сделал, все скрипты поправил, остался только запрос в модели.

public function getProducts($data = array()) {
 - ЭТО запрос к БД в методе /catalog/model/catalog/product.php

       $sql = "SELECT p.product_id, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special";

 

- ЭТО добавление к запросу к БД в методе /catalog/model/catalog/product.php

if (!empty($data['filter_name']) || !empty($data['filter_tag'])) {
            $sql .= " AND (";

            if (!empty($data['filter_name'])) {
                $implode = array();

                $words = explode(' ', trim(preg_replace('/\s+/', ' ', $data['filter_name'])));

                foreach ($words as $word) {
                    $implode[] = "pd.name LIKE '%" . $this->db->escape($word) . "%'";
                }

                if ($implode) {
                    $sql .= " " . implode(" AND ", $implode) . "";
                }

                if (!empty($data['filter_description'])) {
                    $sql .= " OR pd.description LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
                }
            }

            if (!empty($data['filter_name']) && !empty($data['filter_tag'])) {
                $sql .= " OR ";
            }

            if (!empty($data['filter_tag'])) {
                $implode = array();

                $words = explode(' ', trim(preg_replace('/\s+/', ' ', $data['filter_tag'])));

                foreach ($words as $word) {
                    $implode[] = "pd.tag LIKE '%" . $this->db->escape($word) . "%'";
                }

                if ($implode) {
                    $sql .= " " . implode(" AND ", $implode) . "";
                }
            }

            if (!empty($data['filter_name'])) {
                $sql .= " OR LCASE(p.model) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                $sql .= " OR LCASE(p.sku) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                $sql .= " OR LCASE(p.upc) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                $sql .= " OR LCASE(p.ean) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                $sql .= " OR LCASE(p.jan) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                $sql .= " OR LCASE(p.isbn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                $sql .= " OR LCASE(p.mpn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
            }

            $sql .= ")";
 

filter_name - берется из массива /catalog/controller/product/product.php

 

$filter_data = array(
                'filter_name'         => $search,
                                'filter_name1'        => $search1,

Здесь я прописал вторую переменную запроса search1, которую буду использовать для запроса к БД

Как лучше оформить запрос?)))


 

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


 if (!empty($data['filter_name1'])) {
     $sql .= " AND p.product_id IN (SELECT " . DB_PREFIX . "product_attribute.product_id FROM" . DB_PREFIX . "product_attribute WHERE " . DB_PREFIX . "product_attribute.text LIKE '%" . $this->db->escape($data['filter_name1']) . "%')"; 
не работает(

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


if (!empty($data['filter_name1'])) {
    $sql .= " AND p.product_id IN (SELECT pa.product_id FROM " . DB_PREFIX . "product_attribute pa WHERE pa.language_id = '" . (int)$this->config->get('config_language_id') . "' AND LCASE(pa.text) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name1'])) . "%' ) ";
}

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

Ищет два товара, где встречается этот атрибут, а как сделать, чтобы поиск был только по двум совпадениям?

Ещё, если в двум полях одно значение, то находит все товары, где встречается этот атрибут

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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