Перейти к содержанию

Помогите перенести блок Сопутствующие товары в отдельный модуль


Перейти к решению Решено mpn2005,

Рекомендуемые сообщения

Сделал отдельный модуль для вывода Сопутствующих товаров в карточке продукта, чтобы управлять расположением этого блока через Макеты в Админке. Добавил Сопутствующие в продукт. Добавил модуль в схему товара.

Проблема в том, что ничего не выводит.

Файл контроллера модуля:

Спойлер
<?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 } ?>

 

 

Изменено пользователем DenKuzmin
Ссылка на комментарий
Поделиться на другие сайты

Воспользуйтесь расширенным поиском по форуму opencart Воспользоваться поиском

Ознакомьтесь с руководством по использованию opencart Перейти к Документации

Расширьте возможности интернет-магазина дополнениями Подобрать Модуль

Выберите исполнителя для вашего технического задания Выбрать Исполнителя

в вашем контроллере ни строчки о том, куда все это будет выводиться/какой файл шаблона используется

 

смотрите как сделано на примере штатного модуля Рекомендуемых (Featured)

catalog\controller\extension\module\featured.php

 

вообще, неясно - зачем рекомендуемые делать в виде отдельного модуля на странице товара, если их вывод прописан в самой странице товара

Ссылка на комментарий
Поделиться на другие сайты

24 минуты назад, DenKuzmin сказал:

Проблема в том, что ничего не выводит.

Если это отдельный модуль, то нужно его ещё добавить в схему товара.

А для этого ему надо сделать ещё и админку.

 

Или можно в контроллере сделать так:

$data['my_related'] = $this->load->controller('extension/module/related_products');

 

А в шаблоне товара в нужном месте для вывода - так:

<?php echo $my_related; ?>

 

Ссылка на комментарий
Поделиться на другие сайты

Опубликовано (изменено)
33 минуты назад, mpn2005 сказал:

Если это отдельный модуль, то нужно его ещё добавить в схему товара.

Это есть и Админку сделал.

image.png.614bfe09d5c073775d49947321ebe0f6.png

Изменено пользователем DenKuzmin
Ссылка на комментарий
Поделиться на другие сайты

Опубликовано (изменено)
39 минут назад, AlexDW сказал:

в вашем контроллере ни строчки о том, куда все это будет выводиться/какой файл шаблона используется

Для этого и вывожу в отдельный модуль, чтобы можно было управлять расположением этого блока через Макеты.

39 минут назад, AlexDW сказал:

на примере штатного модуля Рекомендуемых (Featured)

Это не то. Мне нужно цеплять "Сопутствующие товары" (скрин).

Нужно перенеси блок, приписанный в вывод в карточке, в отдельный модуль, чтобы можно было управлять расположением этого блока через Макеты в Админке.

image.png.41dd9e61a6dc713a197a81d7984ac72a.png

Изменено пользователем DenKuzmin
Ссылка на комментарий
Поделиться на другие сайты

  • Решение
1 час назад, DenKuzmin сказал:

Для этого и вывожу в отдельный модуль, чтобы можно было управлять расположением этого блока через Макеты.

Если всё сделали, но не работает - значит где-то что-то не так.

Надо тогда отлаживать этот момент при выводе в определённом блоке.

Смотреть что отрабатывает,  и почему не выводит.

 

В первом посте слёту видно две ошибки.

1) Настройки модуль получает как параметр функции index
image.png

 

2) У вас в коде нет вообще никакой обработки по выводу. Модуль поработал, но ничего не вернул.

А должно быть так:

image.png

 

Самый просто способ - это взять встроенный модуль и по его аналогии сделать свой.

Можно например взять такой:

catalog/controller/extension/module/featured.php

 

Ссылка на комментарий
Поделиться на другие сайты

18 часов назад, mpn2005 сказал:

Если всё сделали, но не работает - значит где-то что-то не так.

Надо тогда отлаживать этот момент при выводе в определённом блоке.

Смотреть что отрабатывает,  и почему не выводит.

 

В первом посте слёту видно две ошибки.

1) Настройки модуль получает как параметр функции index
image.png

 

2) У вас в коде нет вообще никакой обработки по выводу. Модуль поработал, но ничего не вернул.

А должно быть так:

image.png

 

Самый просто способ - это взять встроенный модуль и по его аналогии сделать свой.

Можно например взять такой:

catalog/controller/extension/module/featured.php

 

Всё работает. Спасибо большое!

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, DenKuzmin сказал:

Можно сюда выложить модуль? Вдруг кому-то понадобится.

Да. Почему бы  нет. Можно опубликовать в модули.

Ссылка на комментарий
Поделиться на другие сайты

8 минут назад, mpn2005 сказал:

Можно опубликовать в модули.

Не уверен, что прямо в модули можно такое публиковать) Возможно там не все правильно.

Может сперва скинуть вам на проверку?

Ссылка на комментарий
Поделиться на другие сайты

18 минут назад, DenKuzmin сказал:

Не уверен, что прямо в модули можно такое публиковать) Возможно там не все правильно.

Может сперва скинуть вам на проверку?

Зачем мне?

Напишите, что распространяется как есть. Если у кого-то возникнут вопросы, то могут уже написать в тему поддержки. 

Ссылка на комментарий
Поделиться на другие сайты

19 минут назад, mpn2005 сказал:

Напишите, что распространяется как есть. Если у кого-то возникнут вопросы, то могут уже написать в тему поддержки. 

Понял. Спасибо большое.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...