Здравствуйте, Стоит задача вывести в карточку производителя "коллекции" (категории) с товарами данного производителя, бесплатных модульных решений я не нашел, но нашел мануал (ссылка) в нем описывается как это сделать, но возникли сложности, возможно там описывается метод для более ранней версии движка (у меня стоит Opencart 2.0.3.1 (rs.2)) и возникают ошибки. При выполнении всех действий представленных в мануале, на странице производителя в вверху страницы выводится ошибка: Спойлер: Ошибка Notice: Indirect modification of overloaded property ControllerProductManufacturer::$data has no effect in /home/i/***/***/public_html/system/modification/catalog/controller/product/manufacturer.php on line 136Notice: Indirect modification of overloaded property ControllerProductManufacturer::$data has no effect in /home/i/***/***/public_html/system/modification/catalog/controller/product/manufacturer.php on line 138Notice: Indirect modification of overloaded property ControllerProductManufacturer::$data has no effect in /home/i/***/***/public_html/system/modification/catalog/controller/product/manufacturer.php on line 149 Ругается на строчки Код: 136: $this->data['manufacturer_id'] = $manufacturer_id; 138: $this->data['manufacturer_categories'] = array(); 149: $this->data['manufacturer_categories'][] = array( 'category_id' => $categories_data['category_id'], 'name' => $categories_data['name'], 'thumb' => $image, 'href' => $this->url->link('product/category', '&path=' . $categories_data['category_id']) ); } И на месте где должны быть категории, выводится ошибка: Спойлер: Ошибка Notice: Undefined variable: manufacturer_categories in /home/i/***/***/public_html/system/modification/catalog/view/theme/default/template/product/manufacturer_info.tpl on line 24 Код: 24: <a href="<?php echo $category['href']; ?>?m=<?php echo $manufacturer_id; ?>"> <img src="<?php echo $category['thumb']; ?>"> </a> Подскажите пожалуйста, может там не полная инструкция и нужно дополнительно что-то, куда-то дописать или изменить для моей версии Opencart, может кто-то сталкивался с этим уже. Или возможно вы знаете аналогичные способы для решения данной задачи, Заранее спасибо, очень жду ваших советов
/catalog/model/catalog/category.php Находите: PHP: public function getCategoryFilters($category_id) { Перед ней вставляете PHP: public function getProductCategories($product_id) { $query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'"); return $query->rows; } Тут изменений нет ни каких. /catalog/controller/product/manufacturer.php Находите PHP: $manufacturer_info = $this->model_catalog_manufacturer->getManufacturer($manufacturer_id); перед ней вставляете: PHP: $this->load->model('catalog/category'); $categories = array(); $products_ids = $this->model_catalog_product->getProducts(array('filter_manufacturer_id' => $manufacturer_id)); foreach ($products_ids as $id) { $manufacturer_products[] = array('product_id' => $id['product_id']); $product_categories = $this->model_catalog_category->getProductCategories($id['product_id']); foreach ($product_categories as $product_category){ if (!in_array($product_category['category_id'], $categories)) { $categories[] = $product_category['category_id']; } } } $data['manufacturer_id'] = $manufacturer_id; $data['manufacturer_categories'] = array(); foreach ($categories as $value) { $categories_data = $this->model_catalog_category->getCategory($value); if ($categories_data['image']) { $image = $this->model_tool_image->resize($categories_data['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height')); } else { $image = false; } $data['manufacturer_categories'][] = array( 'category_id' => $categories_data['category_id'], 'name' => $categories_data['name'], 'thumb' => $image, 'href' => $this->url->link('product/category', '&path=' . $categories_data['category_id']) ); } Изменялись: 1. PHP: $this->data['manufacturer_id'] = $manufacturer_id; 2. PHP: $this->data['manufacturer_categories'] = array(); 3. PHP: $this->data['manufacturer_categories'][] = array( на 1. PHP: $data['manufacturer_id'] = $manufacturer_id; 2. PHP: $data['manufacturer_categories'] = array(); 3. PHP: $data['manufacturer_categories'][] = array( /catalog/view/theme/default/template/product/manufacturer_info.tpl Находите: PHP: <?php if ($products) { ?> Перед ней вставляете БЕЗ ВКЛЮЧЕННОГО ЧПУ: PHP: <?php if ($manufacturer_categories) { ?> <div class="category-list"> <?php foreach ($manufacturer_categories as $category) { ?> <div> <?php if ($category['thumb']) { ?> <a href="<?php echo $category['href']; ?>&m=<?php echo $manufacturer_id; ?>"> <img src="<?php echo $category['thumb']; ?>"> </a> <?php } ?> </div> <a href="<?php echo $category['href']; ?>&m=<?php echo $manufacturer_id; ?>"> <?php echo $category['name']; ?> </a> <?php } ?> </div> <?php } ?> С ВКЛЮЧЕННЫМ ЧПУ PHP: <?php if ($manufacturer_categories) { ?> <div class="category-list"> <?php foreach ($manufacturer_categories as $category) { ?> <div> <?php if ($category['thumb']) { ?> <a href="<?php echo $category['href']; ?>?m=<?php echo $manufacturer_id; ?>"> <img src="<?php echo $category['thumb']; ?>"> </a> <?php } ?> </div> <a href="<?php echo $category['href']; ?>?m=<?php echo $manufacturer_id; ?>"> <?php echo $category['name']; ?> </a> <?php } ?> </div> <?php } ?>
Наигромнейшее вам спасибо, отредактировал/добавил все как вы написали, все заработало, еще раз спасибо!
Не стал создавать новую тему, т.к. вопрос - продолжение этого же решения) Как изменить вышеуказанный код, чтобы вывести не категории, а только подкатегории, в которых есть товары производителя (opencart 2.3)?
Странная затея конечно. В теории можно. Дополните код перебором основных категорий до их подкатегорий..