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

Сортировать товары в категориях по производителю, по порядку сортировки


Recommended Posts

Помогите пожалуйста настроить сортировку товаров в категориях так, чтобы сначала были товары тех производителей, чей порядок сортировки выше. Видел как делают сортировку по производителю в алфавитном порядке, но надо, чтобы можно было самому указывать порядок, а для этого ни ИД, ни алфавит не подойдут, а ручной порядок сортировки для производителей вполне сгодится. Подскажите пожалуйста.

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


В модели продукта есть код
 

Цитата

 

        $sort_data = array(
            'pd.name',
            'p.model',
            'p.quantity',
            'p.price',
            'rating',
            'p.sort_order',
            'p.date_added'
        );

        if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
            if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
                $sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
            } elseif ($data['sort'] == 'p.price') {
                $sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
            } else {
                $sql .= " ORDER BY " . $data['sort'];
            }
        } else {
            $sql .= " ORDER BY p.sort_order";
        }

 

Тут по умолчанию идет сортировка по sort_orde

} else {
            $sql .= " ORDER BY p.sort_order";
        }

Замени на $sql .= " ORDER BY p.manufacturer_id"

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

В 04.04.2020 в 02:46, esculapra сказал:

В модели продукта есть код
 

Тут по умолчанию идет сортировка по sort_orde

} else {
            $sql .= " ORDER BY p.sort_order";
        }

Замени на $sql .= " ORDER BY p.manufacturer_id"

Спасибо. Сделал так как вы описали. В файле catalog/model/catalog/product.php нашел строчку 

} else {
			$sql .= " ORDER BY p.sort_order";
		}

И изменил на 

} else {
			$sql .= " ORDER BY p.manufacturer_id";
		}

Обновил модификаторы, но в категории ничего не произошло. Все как было, так и осталось.

Змінено користувачем alinalessioYandex
Надіслати
Поділитися на інших сайтах


1 минуту назад, alinalessioYandex сказал:

в категории ничего не произошло

Сделай принт сроки запроса - print_r($sql) - и посмотри на него

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

20 минут назад, esculapra сказал:

Сделай принт сроки запроса - print_r($sql) - и посмотри на него

Не понял, как сделать принт запроса. )))

 

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


26 минут назад, esculapra сказал:

Добавь print_r($sql) перед $query = $this->db->query($sql);

Спасибо вам! Вот, какими ошибками высыпало. )))

 

SELECT p.product_id, (SELECT AVG(rating) AS total FROM web72ru_review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM web72ru_product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' 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 web72ru_product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' 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 FROM web72ru_product_to_category p2c LEFT JOIN web72ru_product p ON (p2c.product_id = p.product_id) LEFT JOIN web72ru_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN web72ru_product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND p2c.category_id = '76' GROUP BY p.product_id ORDER BY p.sort_order ASC, LCASE(pd.name) ASC LIMIT 0,15

 

Змінено користувачем alinalessioYandex
Надіслати
Поділитися на інших сайтах


Вроде получилось. Спасибо. Но, сейчас товары сортируются по производителям, где производители выстраиваются по ID. А можно сделать так, чтобы можно было из админки задавать порядок очередности? В админке, производителям можно указать сортировку. Можно ли подвязать эту сортировку к сортировке товаров в категориях? Чтобы товары сортировались по умолчанию не по ID производителей, а по номеру сортировки. 

 

---------------------------

Так как сейчас товары сортируются по ИД производителя, думал, мне удастся просто в базе данных производителям дать нужный порядок ИД и тогда товары будут сортироваться в нужном порядке. Но заменив в таблице ИД одного производителя, ничего не произошло. Только сам производитель исчез. Похоже, что ИД производителей упоминается в других таблицах и заменять ИД нужно во всех таблицах, а не в одной. 

 

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

Змінено користувачем alinalessioYandex
Надіслати
Поділитися на інших сайтах


3 часа назад, alinalessioYandex сказал:

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

Я  думаю можно отдельно выбрать из таблицы производителей  отсортированные по sort_order,  а потом сделать типа обхода массива
 

Цитата

 

foreach($manufacturer as $man){

    foreach($products as $product){

     if($product['manufacturer_id']==$man['manufacturer_id'])

       $sort_products[]=$product;

  }

}

 

Могут быть еще варианты.

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

10 часов назад, esculapra сказал:

Я  думаю можно отдельно выбрать из таблицы производителей  отсортированные по sort_order,  а потом сделать типа обхода массива
 

Могут быть еще варианты.

Вот-вот! Именно так и надо. Вы можете написать окмод? А я бы у вас купил. Ну или напишите пожалуйста подробней пошагово, что делать. Вы предложили как раз то, что надо.

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


Хорошо, скинь в личку ТЗ. То есть как ты представляешь алгоритм работы с этим фильтром  А я уже реализую в коде. По цене договоримся.

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

[РЕШЕНО]

Спасибо esculapra за готовность помочь и за то что подкинул отличную идею!

 

Решение обошлось без манипуляций с файлами, а штатными возможностями движка + модулем.

Если есть модуль по массовому управлению товарами, в моем случае "Batch Editor" или "Автоматическая обработка прайс-листов.", то можно просто выбрать определенного производителя и всем его товарам присвоить одно значение сортировки, а для других товаров, других производителей, соответственно другие.

 

 

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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