Jump to content

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


DenKuzmin
 Share

Go to solution Solved by mpn2005,

Recommended Posts

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

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

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

Спойлер
<?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 by DenKuzmin
Link to comment
Share on other sites

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

 

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

catalog\controller\extension\module\featured.php

 

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

Link to comment
Share on other sites

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

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

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

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

 

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

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

 

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

<?php echo $my_related; ?>

 

Link to comment
Share on other sites

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

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

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

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

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

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

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

image.png.41dd9e61a6dc713a197a81d7984ac72a.png

Edited by DenKuzmin
Link to comment
Share on other sites

  • Solution
1 час назад, DenKuzmin сказал:

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

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

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

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

 

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

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

 

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

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

image.png

 

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

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

catalog/controller/extension/module/featured.php

 

Link to comment
Share on other sites

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

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

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

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

 

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

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

 

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

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

image.png

 

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

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

catalog/controller/extension/module/featured.php

 

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

Link to comment
Share on other sites

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

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

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

Зачем мне?

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

Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...