Jump to content

Recommended Posts

Доброго дня.

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

 

Share this post


Link to post
Share on other sites
42 минуты назад, AndreyQ сказал:

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

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

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

Share this post


Link to post
Share on other sites
6 минут назад, Microekspert сказал:

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

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

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

Share this post


Link to post
Share on other sites
22 минуты назад, AndreyQ сказал:

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

Пришлите ссылку пожалуйста

Share this post


Link to post
Share on other sites

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

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

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, которую буду использовать для запроса к БД

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


 

Share this post


Link to post
Share on other sites

 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']) . "%')"; 
не работает(

Share this post


Link to post
Share on other sites

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'])) . "%' ) ";
}

Share this post


Link to post
Share on other sites

С LCASE интересное решение, попробую, спасибо.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.