1 Отредактировано Михаил (22.08.2019 23:27:54)

Тема: Вывести в каталоге категории товары из другой категории

Стоит задача разместить в каталогах определенных категорий подарки, разбавив ими список товаров.

Самое простое, что пришло в голову:

1. Сами подарки реализовать в виде отдельной категории.

2. При формировании списка товаров получить набор подарков и замешать их в этот список.

Этот вариант попробовали, и он сработал.

Проблема в том, что код, отвечающий за п.2, нужно вставлять в метод модуля \Catalog\Controller\Front\ListProducts::actionIndex() (файл modules\catalog\controller\front\listproducts.inc.php), который перепишется при первом же обновлении модуля (если я правильно понимаю).

Подозреваю, что нужно каким-то образом создать свой дочерний класс и там этот метод переопределить, но он тако-о-ой длиннющий и непонятный, что подобное потребует бездумного копипаста 95% этой массы кода и потому чревато ошибками.

Как здесь следует поступить?

Повысить оценку Понизить оценку

Re: Вывести в каталоге категории товары из другой категории

listproducts.inc.php переименуйте в listproducts.my.inc.php и файл останется.

3 Отредактировано Закусило Александр (26.08.2019 18:40:38)

Re: Вывести в каталоге категории товары из другой категории

Подозреваю, что нужно каким-то образом создать свой дочерний класс и там этот метод переопределить, но он тако-о-ой длиннющий и непонятный, что подобное потребует бездумного копипаста 95% этой массы кода и потому чревато ошибками.

Как здесь следует поступить?

Вы верно думаете. Вам нужно событие getroute (ссылка) в нем нужно создать тот же самый маршрут, что и в модуле каталога, только третьим аргументом указать не null, а массив

[
   'controller' => 'custom-front-listproducts'
]

Где custom-front-listproducts это путь к контроллеру Вашему модуля /custom/controller/front/listproducts.inc.php

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

4

Re: Вывести в каталоге категории товары из другой категории

Закусило Александр пишет:

Вам нужно событие getroute в нем нужно создать тот же самый маршрут, что и в модуле каталога

А где это событие перехватывается? Как мне создать такой маршрут и передать ему управление?

Мне, получается, нужно создать для этого отдельный модуль?

Повысить оценку Понизить оценку

Re: Вывести в каталоге категории товары из другой категории

Если не делали свой модуль, то для начала просто переименуйте файл и сделайте необходимые доработки.
Потом оформите своим модулем.
Спойлер:
В handlers.inc.php модуля можно указывать, на какие события навешивать модуль. Все  примеры есть в документации разработчика и в коде самих модулей.

6

Re: Вывести в каталоге категории товары из другой категории

Вариант с listproducts.my.inc.php работает, спасибо. Пока остановлюсь на нём.

Повысить оценку Понизить оценку