admin Опубликовано 12 марта, 2022 Поделиться Опубликовано 12 марта, 2022 Доработка сортировка рекомендованных товаров по категориям В Opencart есть очень полезная функция рекомендованных товаров. Однако в стандартном исполнении очень не хватает сортировки по категориям. Согласитесь, что к ноутбуку могут быть множество аксессуаров, наушники, мышки, сумки и тому подобное. Рекомендованных товаров может быть большое количество, и если пользователю нужны только мышки, при стандартном исполнении, ему нужно все просматривать, что согласитесь неудобно. В данной доработке мы сделаем вывод рекомендованных товаров по категориям. С помощью дополнительных скриптов, например скрывающегося и раскрывающегося блока div можно показать только названия категорий, а содержимое, то есть все товары скрыть и при нажатии нужной категории покупатель увидит все рекомендованные товары, которые ему интересные. Для реализации задуманного нам надо будет изменить три файла и соответственно разделим все на три этапа. 1. Для начала добавим функцию выборки всех категорий в которых находится данный товар. Для этого открываем файл: /catalog/model/catalog/product.php Находим строку: public function getProductRelated($product_id) { Перед ней вставляем: public function getProductCategory($product_id) { $product_data = array(); $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p2c.product_id = '" . (int)$product_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); foreach ($query->rows as $result) { $product_data[$result['category_id']] = $this->model_catalog_category->getCategory($result['category_id']); } return $product_data; } Сохраняем, теперь у нас есть массив с id категорий товара. 2. Далее добавим необходимый функционал в контроллер, для этого открываем: /catalog/controller/product/product.php Находим строки: $this->data['products'] = array(); После неё вставляем: $this->data['categories'] = array(); $category_names = array(); Далее находим строку $this->data['products'][] = array( Перед ней вставляем: $category_data = $this->model_catalog_product->getProductCategory($result['product_id']); foreach($category_data as $id){ $category_name = $id['name']; $category_category_id = $id['category_id']; $category_sort_order = $id['sort_order']; } Далее находим строку: 'name' => $result['name'], После нее вставляем: 'category_name' => $category_name, 'category_id' => $category_category_id, 'category_sort' => $category_sort_order, Далее находим строку: 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']) После нее вставляем: if(!in_array($category_name, $category_names)){ $category_names[] = $category_name; } $this->data['products_cat'] = $category_names; Далее находим строку: $this->data['tags'] = array(); Перед ней вставляем: foreach ($this->data['products_cat'] as $name) { $products = array(); foreach ($this->data['products'] as $result) { if($name == $result['category_name']){ $products[] = array( 'product_id' => $result['product_id'], 'thumb' => $result['thumb'], 'name' => $result['name'], 'price' => $result['price'], 'special' => $result['special'], 'rating' => $result['rating'], 'reviews' => $result['reviews'], 'href' => $result['href'] ); } } $this->data['categories'][] = array( 'name' => $name, 'products' => $products ); } Сохраняем, теперь у нас есть массив с категориями у которого есть массив с товарами этих категорий. Осталось дело за малым, отредактировать вывод рекомендованных товаров. 3. Для этого открываем файл шаблона: /catalog/view/theme/default/template/product/product.tpl Находим строку: <?php if ($products) { ?> Заменяем её на: <?php if ($categories) { ?> Далее находим строку: <?php foreach ($products as $product) { ?> Заменяем её на строки: <?php foreach ($categories as $category) { ?> <h2><?php echo $category['name']; ?></h2> <?php foreach ($category['products'] as $product) { ?> Далее находим строку: <a class="button" onclick="addToCart('<?php echo $product['product_id']; ?>');"?><?php echo $button_cart; ?> После неё добавляем: <?php } ?> Все готово! После внесения изменений все рекомендованные товары сортируются по категориям. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.