Необходимо в карточку товара добавить вывод категорий, в которых товар находится. 2.0.3.1, стоит Journal 2.6.5. Гуглил и пробовал способы для Opencart 1.5... - ничего не получается. Может решение для 2.0 чем-то отличается? Или просто руки кривые. Помогите.
catalog/model/catalog/product.php находим строку: Код: public function getCategories($product_id) { перед ней добавляем: Код: public function getCategoryNames($product_id) { $query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p2c.category_id = cd.category_id) WHERE p2c.product_id = '" . (int)$product_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "'"); return $query->rows; } далее... идем к catalog/controller/product/product.php находим строку: Код: $data['points'] = $product_info['points']; после неё добавляем: Код: //add_cat_list_baco $data['cat_list'] = $this->model_catalog_product->getCategoryNames($product_id); //EOF_add_cat_list_baco и на финал: catalog/view/theme/ВАША_ТЕМА/template/product/product.tpl находим: Код: <?php if ($tax) { ?> перед этой строкой, добавляем: Код: <?php if ($cat_list) { ?> <?php foreach ($cat_list as $cat_name) { ?> <li><?php echo $cat_name['name']; ?></li> <?php } ?> <?php } ?> готово...
все так сделал - ругается Notice: Undefined variable: cat_list in /home/konstruk/public_html/catalog/view/theme/journal2/template/product/product.tpl on line 331 --- Добавлено, 8 ноя 2015 --- именно категории в карточку товара Спасибо! Разобрался - очистил кэш модификаторов и обновил.
Гуглил и пробовал варианты часов 5 и наконец-то нашел здесь более-менее рабочее решение для моего случая) в основном все ответы для старых опенкарт, и для новых версий адаптировать не удалось. Вывожу категорию в карточке товара, когда товаров на странице несколько. Конкретно, модуль futured (рекомендуемые товары). В дальнейшем и в каталоге хотел бы вывести. Но появилась проблема - выводится одинаковая категория для всех товаров (сами товары относятся к разным категориям - а выводится одна и та же у всех). Видимо надо поместить код внутрь массива, который выведет каждому товару его категорию.. но сделать это никак не удалось. Не могли бы вы мне помочь? opencart 2 PS в идеале, если это не слишком сложно, хотелось бы чтобы название категории было еще ссылкой на эту категорию, а не просто текстом. заранее благодарю..
Нужно обработку делать в том же цикле, в котором формируется массив товаров для вывода в шаблон, а вы, вероятно, это делаете после цикла, потому туда попадает только категория из последнего товара в цикле, которая осталась в переменной. Посмотрите, как выводится, например, название товара и всё поймёте.
возможно с моей будет наглостью просить конкретно пример кода, но иначе никак не получается, совсем не программист :( featured.php Код: <?php class ControllerModuleFeatured extends Controller { public function index($setting) { $this->load->language('module/featured'); $this->document->addScript('catalog/view/javascript/jquery/owl-carousel/owl.carousel.min.js'); $data['heading_title'] = $setting['name']; $data['text_alt'] = $this->language->get('text_alt'); $data['button_cart'] = $this->language->get('button_cart'); $data['button_wishlist'] = $this->language->get('button_wishlist'); $data['button_compare'] = $this->language->get('button_compare'); $this->load->model('catalog/product'); $this->load->model('tool/image'); $data['products'] = array(); if (!$setting['limit']) { $setting['limit'] = 100; } if (!empty($setting['product'])) { $products = array_slice($setting['product'], 0, (int)$setting['limit']); foreach ($products as $product_id) { $product_info = $this->model_catalog_product->getProduct($product_id); if ($product_info) { if ($product_info['image']) { $image = $this->model_tool_image->resize($product_info['image'], $setting['width'], $setting['height']); } else { $image = $this->model_tool_image->resize('placeholder.png', $setting['width'], $setting['height']); } if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) { $price = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax'))); } else { $price = false; } if ((float)$product_info['special']) { $special = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax'))); } else { $special = false; } if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)$product_info['special'] ? $product_info['special'] : $product_info['price']); } else { $tax = false; } if ($this->config->get('config_review_status')) { $rating = $product_info['rating']; } else { $rating = false; } $imgs = $this->model_catalog_product->getProductImages($product_info['product_id']); $imgt = array(); foreach ($imgs as $imgi) { $imgt[0] = array( 'thumb' => $this->model_tool_image->resize($imgi['image'], $setting['width'], $setting['height']) ); } $data['products'][] = array( 'images' => $imgt, 'product_id' => $product_info['product_id'], 'thumb' => $image, 'name' => $product_info['name'], 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $rating, 'href' => $this->url->link('product/product', 'product_id=' . $product_info['product_id']) ); } } } if ($data['products']) { if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/featured.tpl')) { return $this->load->view($this->config->get('config_template') . '/template/module/featured.tpl', $data); } else { return $this->load->view('default/template/module/featured.tpl', $data); } } } } повторюсь, представленное здесь решение сделано для страницы товара и все работает, а на странице с несколькими товарами - категория повторяется. не получилось сформировать категорию и ссылку на категорию, чтобы потом вывести их в цикле где формируется название и прочее) --- Добавлено, 19 ноя 2015 --- http://cartopen.ru/kategorii-v-kartochku-tovara тут нашел пример с категорией и ссылкой на категорию, но тоже для страницы товара. впрочем наверное версия OpCa другая и потому не работает вовсе
Я в этом коде вообще не вижу никакого вывода категорий. Чтоб вывести категорию для товара в этом модуле, добавьте её вывод сюда: PHP: $data['products'][] = array( 'images' => $imgt, 'product_id' => $product_info['product_id'], 'thumb' => $image, 'name' => $product_info['name'], 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $rating, 'href' => $this->url->link('product/product', 'product_id=' . $product_info['product_id']), /* Вот так: */ 'product_category' => $product_category ); Соответственно, заранее нужно подготовить переменную $product_category и сделать это прямо перед массивом, куда вы её выводите. Для этого сойдёт инструкция, которая по вашей ссылке (та часть, которая относится к контроллеру), она актуальна и для ОК 2. Только у вас вместо $product_id будет $product_info['product_id'].
имел ввиду решение от Baco. Спасибо за подсказку, разобрался, сделал. Насчет качества кода не знаю, но работает. подготовка переменной в контроллере PHP: $querycats = $this->model_catalog_product->getCategories($product_id);$categories = array();foreach( $querycats as $item ) { $categ = $this->model_catalog_category->getCategory($item['category_id']); $catinfo['id'] = $item['category_id']; $catinfo['href'] = $this->url->link('product/category', 'path=' . $item['category_id']); $catinfo['name'] = $categ['name']; $categories[] = $catinfo;} а дальше, как вы показали - 'product_category' => $product_category в нужном месте потом вывод в шаблоне: PHP: <div class="product-category"><?php foreach ($product['categories'] as $category) { ?> <a href="<?php echo $category['href']; ?>" rel="nofollow"><?php echo $category['name']; ?></a><?php } ?></div> и остается лишь оформить в css, чтобы была запятая или промежуток между категориями (если у товара более 1 категории). надеюсь много лишней нагрузки такой код не принесет.
Все по приведенному примеру работает в 2.0 там минимальные правки - Код: <file path="catalog/controller/product/product.php"> <operation> <search trim="true"><![CDATA[$this->document->setDescription($product_info['meta_description']);]]></search> <add trim="true" position="replace"><![CDATA[ $this->document->setDescription($product_info['meta_description']); // $this->load->model('catalog/category'); $catprod = array(); $product_category = $this->model_catalog_product->getCategories($product_id); foreach ($product_category as $prodcat) { $category_info = $this->model_catalog_category->getCategory($prodcat['category_id']); if ($category_info) { $data['catprod'][] = array( 'name' => $category_info['name'], 'href' => $this->url->link('product/category', 'path=' . $category_info['category_id']) ); } } // ]]></add> </operation> </file> И выводит все назначенные товару категории