DenKuzmin Posted June 8, 2022 at 01:30 PM Share Posted June 8, 2022 at 01:30 PM (edited) Сделал отдельный модуль для вывода Сопутствующих товаров в карточке продукта, чтобы управлять расположением этого блока через Макеты в Админке. Добавил Сопутствующие в продукт. Добавил модуль в схему товара. Проблема в том, что ничего не выводит. Файл контроллера модуля: Спойлер <?php class ControllerExtensionModuleRelatedProducts extends Controller { private $error = array(); public function index() { $this->load->language('extension/module/related_products'); if (isset($this->request->get['product_id'])) { $product_id = (int)$this->request->get['product_id']; } else { $product_id = 0; } $product_category = $this->model_catalog_product->getCategories($product_id); $product_info = $this->model_catalog_product->getProduct($product_id); $categories = $this->model_catalog_product->getCategories($product_info['product_id']); if ($categories){ $categories_info = $this->model_catalog_category->getCategory($categories[0]['category_id']); $data['category_id'] = $categories_info['category_id']; } if ($product_info) { $data['text_related'] = $this->language->get('text_related'); $data['products'] = array(); $results = $this->model_catalog_product->getProductRelated($this->request->get['product_id']); foreach ($results as $result) { if ($result['image']) { $image = $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_related_width'), $this->config->get($this->config->get('config_theme') . '_image_related_height')); } else { $image = $this->model_tool_image->resize('placeholder.png', $this->config->get($this->config->get('config_theme') . '_image_related_width'), $this->config->get($this->config->get('config_theme') . '_image_related_height')); } if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) { $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); } else { $price = false; } if ((float)$result['special']) { $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); } else { $special = false; } if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']); } else { $tax = false; } if ($this->config->get('config_review_status')) { $rating = (int)$result['rating']; } else { $rating = false; } $data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => $result['minimum'] > 0 ? $result['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']) ); } } } } Шаблон для Сопутствующих: Спойлер <?php if ($products) { ?> <div class="related-products"> <h3> С этим товаром покупают </h3> <div class="product-slider"> <div class="slider-box"> <div class="slider"> <?php $i = 0; ?> <?php foreach ($products as $product) { ?> <div class="slide"> <div class="product-layout transition"> <?php if ($logged) { ?> <div class="slider-top-buttons"> <button type="button" data-toggle="tooltip" title="<?php echo $button_wishlist; ?>" onclick="wishlist.add('<?php echo $product['product_id']; ?>');"><i class="fa fa-heart"></i></button> <button type="button" data-toggle="tooltip" title="<?php echo $button_compare; ?>" onclick="compare.add('<?php echo $product['product_id']; ?>');"><i class="fa fa-exchange"></i></button> </div> <?php } ?> <div class="image"> <div class="main-img"> <a href="<?php echo $product['href']; ?>"> <img src="" data-src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" title="<?php echo $product['name']; ?>" class="img-responsive lazyload" /> </a> </div> </div> <h4><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></h4> <div class="slider-price"> <?php if ($product['price']) { ?> <p class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <?php } else { ?> <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span> <?php } ?> <?php if ($product['tax']) { ?> <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> <?php } ?> </p> <?php } ?> </div> <div class="product-layout-bottom"> <div class="caption"> <?php if ($product['rating']) { ?> <div class="rating"> <?php for ($i = 1; $i <= 5; $i++) { ?> <?php if ($product['rating'] < $i) { ?> <span class="rating-star gold rating-star-o"></span> <?php } else { ?> <span class="rating-star gold"></span> <?php } ?> <?php } ?> </div> <?php } else { ?> <div class="rating"> <span class="rating-star rating-star-o"></span> <span class="rating-star rating-star-o"></span> <span class="rating-star rating-star-o"></span> <span class="rating-star rating-star-o"></span> <span class="rating-star rating-star-o"></span> </div> <?php } ?> </div> <div class="button-group"> <button type="button" class="add-to-cart" onclick="cart.add('<?php echo $product['product_id']; ?>');"><i class="fa fa-shopping-cart"></i> <span>Купить</span></button> </div> </div> </div> </div> <?php $i++; ?> <?php } ?> </div> </div> <div class="slider-btn-prev"></div> <div class="slider-btn-next"></div> </div> </div> <?php } ?> Edited June 8, 2022 at 02:25 PM by DenKuzmin 0 Quote Link to comment Share on other sites More sharing options...
AlexDW Posted June 8, 2022 at 01:50 PM Share Posted June 8, 2022 at 01:50 PM в вашем контроллере ни строчки о том, куда все это будет выводиться/какой файл шаблона используется смотрите как сделано на примере штатного модуля Рекомендуемых (Featured) catalog\controller\extension\module\featured.php вообще, неясно - зачем рекомендуемые делать в виде отдельного модуля на странице товара, если их вывод прописан в самой странице товара 0 Quote модули для удобной работы с Opencart Link to comment Share on other sites More sharing options...
mpn2005 Posted June 8, 2022 at 01:57 PM Share Posted June 8, 2022 at 01:57 PM 24 минуты назад, DenKuzmin сказал: Проблема в том, что ничего не выводит. Если это отдельный модуль, то нужно его ещё добавить в схему товара. А для этого ему надо сделать ещё и админку. Или можно в контроллере сделать так: $data['my_related'] = $this->load->controller('extension/module/related_products'); А в шаблоне товара в нужном месте для вывода - так: <?php echo $my_related; ?> 0 Quote Link to comment Share on other sites More sharing options...
DenKuzmin Posted June 8, 2022 at 02:17 PM Author Share Posted June 8, 2022 at 02:17 PM (edited) 33 минуты назад, mpn2005 сказал: Если это отдельный модуль, то нужно его ещё добавить в схему товара. Это есть и Админку сделал. Edited June 8, 2022 at 02:30 PM by DenKuzmin 0 Quote Link to comment Share on other sites More sharing options...
DenKuzmin Posted June 8, 2022 at 02:22 PM Author Share Posted June 8, 2022 at 02:22 PM (edited) 39 минут назад, AlexDW сказал: в вашем контроллере ни строчки о том, куда все это будет выводиться/какой файл шаблона используется Для этого и вывожу в отдельный модуль, чтобы можно было управлять расположением этого блока через Макеты. 39 минут назад, AlexDW сказал: на примере штатного модуля Рекомендуемых (Featured) Это не то. Мне нужно цеплять "Сопутствующие товары" (скрин). Нужно перенеси блок, приписанный в вывод в карточке, в отдельный модуль, чтобы можно было управлять расположением этого блока через Макеты в Админке. Edited June 8, 2022 at 02:29 PM by DenKuzmin 0 Quote Link to comment Share on other sites More sharing options...
Solution mpn2005 Posted June 8, 2022 at 03:35 PM Solution Share Posted June 8, 2022 at 03:35 PM 1 час назад, DenKuzmin сказал: Для этого и вывожу в отдельный модуль, чтобы можно было управлять расположением этого блока через Макеты. Если всё сделали, но не работает - значит где-то что-то не так. Надо тогда отлаживать этот момент при выводе в определённом блоке. Смотреть что отрабатывает, и почему не выводит. В первом посте слёту видно две ошибки. 1) Настройки модуль получает как параметр функции index 2) У вас в коде нет вообще никакой обработки по выводу. Модуль поработал, но ничего не вернул. А должно быть так: Самый просто способ - это взять встроенный модуль и по его аналогии сделать свой. Можно например взять такой: catalog/controller/extension/module/featured.php 2 Quote Link to comment Share on other sites More sharing options...
DenKuzmin Posted June 9, 2022 at 09:47 AM Author Share Posted June 9, 2022 at 09:47 AM 18 часов назад, mpn2005 сказал: Если всё сделали, но не работает - значит где-то что-то не так. Надо тогда отлаживать этот момент при выводе в определённом блоке. Смотреть что отрабатывает, и почему не выводит. В первом посте слёту видно две ошибки. 1) Настройки модуль получает как параметр функции index 2) У вас в коде нет вообще никакой обработки по выводу. Модуль поработал, но ничего не вернул. А должно быть так: Самый просто способ - это взять встроенный модуль и по его аналогии сделать свой. Можно например взять такой: catalog/controller/extension/module/featured.php Всё работает. Спасибо большое! 0 Quote Link to comment Share on other sites More sharing options...
DenKuzmin Posted June 9, 2022 at 06:39 PM Author Share Posted June 9, 2022 at 06:39 PM Можно сюда выложить модуль? Вдруг кому-то понадобится. 0 Quote Link to comment Share on other sites More sharing options...
mpn2005 Posted June 9, 2022 at 06:46 PM Share Posted June 9, 2022 at 06:46 PM 6 минут назад, DenKuzmin сказал: Можно сюда выложить модуль? Вдруг кому-то понадобится. Да. Почему бы нет. Можно опубликовать в модули. 0 Quote Link to comment Share on other sites More sharing options...
DenKuzmin Posted June 9, 2022 at 06:56 PM Author Share Posted June 9, 2022 at 06:56 PM 8 минут назад, mpn2005 сказал: Можно опубликовать в модули. Не уверен, что прямо в модули можно такое публиковать) Возможно там не все правильно. Может сперва скинуть вам на проверку? 0 Quote Link to comment Share on other sites More sharing options...
mpn2005 Posted June 9, 2022 at 07:15 PM Share Posted June 9, 2022 at 07:15 PM 18 минут назад, DenKuzmin сказал: Не уверен, что прямо в модули можно такое публиковать) Возможно там не все правильно. Может сперва скинуть вам на проверку? Зачем мне? Напишите, что распространяется как есть. Если у кого-то возникнут вопросы, то могут уже написать в тему поддержки. 0 Quote Link to comment Share on other sites More sharing options...
DenKuzmin Posted June 9, 2022 at 07:35 PM Author Share Posted June 9, 2022 at 07:35 PM 19 минут назад, mpn2005 сказал: Напишите, что распространяется как есть. Если у кого-то возникнут вопросы, то могут уже написать в тему поддержки. Понял. Спасибо большое. 0 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.