DenKuzmin Опубликовано 8.06.2022 в 13:30 Поделиться Опубликовано 8.06.2022 в 13:30 (изменено) Сделал отдельный модуль для вывода Сопутствующих товаров в карточке продукта, чтобы управлять расположением этого блока через Макеты в Админке. Добавил Сопутствующие в продукт. Добавил модуль в схему товара. Проблема в том, что ничего не выводит. Файл контроллера модуля: Спойлер <?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 } ?> Изменено 8.06.2022 в 14:25 пользователем DenKuzmin 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
AlexDW Опубликовано 8.06.2022 в 13:50 Поделиться Опубликовано 8.06.2022 в 13:50 в вашем контроллере ни строчки о том, куда все это будет выводиться/какой файл шаблона используется смотрите как сделано на примере штатного модуля Рекомендуемых (Featured) catalog\controller\extension\module\featured.php вообще, неясно - зачем рекомендуемые делать в виде отдельного модуля на странице товара, если их вывод прописан в самой странице товара 0 Цитата модули для удобной работы с Opencart Ссылка на комментарий Поделиться на другие сайты Поделиться
mpn2005 Опубликовано 8.06.2022 в 13:57 Поделиться Опубликовано 8.06.2022 в 13:57 24 минуты назад, DenKuzmin сказал: Проблема в том, что ничего не выводит. Если это отдельный модуль, то нужно его ещё добавить в схему товара. А для этого ему надо сделать ещё и админку. Или можно в контроллере сделать так: $data['my_related'] = $this->load->controller('extension/module/related_products'); А в шаблоне товара в нужном месте для вывода - так: <?php echo $my_related; ?> 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
DenKuzmin Опубликовано 8.06.2022 в 14:17 Автор Поделиться Опубликовано 8.06.2022 в 14:17 (изменено) 33 минуты назад, mpn2005 сказал: Если это отдельный модуль, то нужно его ещё добавить в схему товара. Это есть и Админку сделал. Изменено 8.06.2022 в 14:30 пользователем DenKuzmin 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
DenKuzmin Опубликовано 8.06.2022 в 14:22 Автор Поделиться Опубликовано 8.06.2022 в 14:22 (изменено) 39 минут назад, AlexDW сказал: в вашем контроллере ни строчки о том, куда все это будет выводиться/какой файл шаблона используется Для этого и вывожу в отдельный модуль, чтобы можно было управлять расположением этого блока через Макеты. 39 минут назад, AlexDW сказал: на примере штатного модуля Рекомендуемых (Featured) Это не то. Мне нужно цеплять "Сопутствующие товары" (скрин). Нужно перенеси блок, приписанный в вывод в карточке, в отдельный модуль, чтобы можно было управлять расположением этого блока через Макеты в Админке. Изменено 8.06.2022 в 14:29 пользователем DenKuzmin 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Решение mpn2005 Опубликовано 8.06.2022 в 15:35 Решение Поделиться Опубликовано 8.06.2022 в 15:35 1 час назад, DenKuzmin сказал: Для этого и вывожу в отдельный модуль, чтобы можно было управлять расположением этого блока через Макеты. Если всё сделали, но не работает - значит где-то что-то не так. Надо тогда отлаживать этот момент при выводе в определённом блоке. Смотреть что отрабатывает, и почему не выводит. В первом посте слёту видно две ошибки. 1) Настройки модуль получает как параметр функции index 2) У вас в коде нет вообще никакой обработки по выводу. Модуль поработал, но ничего не вернул. А должно быть так: Самый просто способ - это взять встроенный модуль и по его аналогии сделать свой. Можно например взять такой: catalog/controller/extension/module/featured.php 2 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
DenKuzmin Опубликовано 9.06.2022 в 09:47 Автор Поделиться Опубликовано 9.06.2022 в 09:47 18 часов назад, mpn2005 сказал: Если всё сделали, но не работает - значит где-то что-то не так. Надо тогда отлаживать этот момент при выводе в определённом блоке. Смотреть что отрабатывает, и почему не выводит. В первом посте слёту видно две ошибки. 1) Настройки модуль получает как параметр функции index 2) У вас в коде нет вообще никакой обработки по выводу. Модуль поработал, но ничего не вернул. А должно быть так: Самый просто способ - это взять встроенный модуль и по его аналогии сделать свой. Можно например взять такой: catalog/controller/extension/module/featured.php Всё работает. Спасибо большое! 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
DenKuzmin Опубликовано 9.06.2022 в 18:39 Автор Поделиться Опубликовано 9.06.2022 в 18:39 Можно сюда выложить модуль? Вдруг кому-то понадобится. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
mpn2005 Опубликовано 9.06.2022 в 18:46 Поделиться Опубликовано 9.06.2022 в 18:46 6 минут назад, DenKuzmin сказал: Можно сюда выложить модуль? Вдруг кому-то понадобится. Да. Почему бы нет. Можно опубликовать в модули. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
DenKuzmin Опубликовано 9.06.2022 в 18:56 Автор Поделиться Опубликовано 9.06.2022 в 18:56 8 минут назад, mpn2005 сказал: Можно опубликовать в модули. Не уверен, что прямо в модули можно такое публиковать) Возможно там не все правильно. Может сперва скинуть вам на проверку? 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
mpn2005 Опубликовано 9.06.2022 в 19:15 Поделиться Опубликовано 9.06.2022 в 19:15 18 минут назад, DenKuzmin сказал: Не уверен, что прямо в модули можно такое публиковать) Возможно там не все правильно. Может сперва скинуть вам на проверку? Зачем мне? Напишите, что распространяется как есть. Если у кого-то возникнут вопросы, то могут уже написать в тему поддержки. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
DenKuzmin Опубликовано 9.06.2022 в 19:35 Автор Поделиться Опубликовано 9.06.2022 в 19:35 19 минут назад, mpn2005 сказал: Напишите, что распространяется как есть. Если у кого-то возникнут вопросы, то могут уже написать в тему поддержки. Понял. Спасибо большое. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.