Поиск по сайту OpenCart Club
Показаны результаты для тегов 'автоматические'.
Найдено: 1 результат
-
diy Автоматический вывод товаров коллекции в рекомендуемые товары
mpn2005 опубликовал запись в блоге в OpenCart DIY - Бери и делай
Для различных типов товаров часто возникает необходимость вывести товары в рекомендуемые автоматически, по определённому критерию. Нередко товары группируются по коллекциям, но штатными средствами OpenCart нет возможности их корректно объединить и добавить автоматически друг к другу как рекомендуемые товары. Эта небольшая доработка позволяет без дополнительных модулей реализовать вывод товаров коллекции в рекомендуемые автоматически, и избавляет вас от необходимости добавлять каждый товар друг к другу вручную. Данная доработка не затрагивает шаблоны, поэтому подходит для любой версии движка и сборки. Для примера рассматривается вариант объединения в коллекции по совпадению поля EAN. По принципу - если поле EAN не пустое, то выводим такие товары в рекомендуемые. В файле catalog/controller/product/product.php Находим строку: $results = $this->model_catalog_product->getProductRelated($this->request->get['product_id']); И заменяем её на это: $results = $this->model_catalog_product->getProductRelatedCollection($product_info); В файле catalog/model/catalog/product.php Перед строкой: public function getProductRelated($product_id) { Добавляем: public function getProductRelatedCollection($product) { // Поле товара, по которому идёт выборка коллекции $collection_field = 'ean'; $product_data = array(); if (!empty($product[$collection_field])) { $query = $this->db->query("SELECT product_id FROM " . DB_PREFIX . "product WHERE product_id != '" . (int)$product['product_id'] . "' AND status = '1' AND `" . $this->db->escape($collection_field) . "` LIKE '" . $this->db->escape($product[$collection_field]) . "' ORDER BY sort_order"); foreach ($query->rows as $result) { $product_data[$result['product_id']] = $this->getProduct($result['product_id']); } } return $product_data; } Если нужно выбирать товары только того же производителя, то функция должна выглядеть так: public function getProductRelatedCollection($product) { // Поле товара, по которому идёт выборка коллекции $collection_field = 'ean'; $product_data = array(); if (!empty($product[$collection_field])) { $query = $this->db->query("SELECT product_id FROM " . DB_PREFIX . "product WHERE product_id != '" . (int)$product['product_id'] . "' AND status = '1' AND manufacturer_id = '" . (int)$product['manufacturer_id'] . "' AND `" . $this->db->escape($collection_field) . "` LIKE '" . $this->db->escape($product[$collection_field]) . "' ORDER BY sort_order"); foreach ($query->rows as $result) { $product_data[$result['product_id']] = $this->getProduct($result['product_id']); } } return $product_data; } Если у вас много товаров, то стоит зайти в phpMyAdmin и добавить индекс для поля EAN. Это ускорит выборку товаров для коллекции. Добавить индекс можно таким запросом: ALTER TABLE `oc_product` ADD INDEX `ean` (`ean`) Обратите внимание на префикс 'oc_', он у вас может отличаться или отсутствовать.- 18 комментариев
-
10
-
- колекции
- рекомендуемые
-
(и ещё 1 )
C тегом: