opencart «Новые поступления» и «Лидеры продаж» — показывать товары только из категории

Есть такие дефолтные модули в opencart’е — latest и bestseller, так вот — разместив их на лайаут Category мы видим фигню: в категории «Гробы» — врезка «Новинки», а в ней показываются товары типа «Презерватив светящийся», «Нос клоунский» и т.д. Короче показывает новинки из других категорий. Это не есть гуд. Лезем на myopencart и наблюдаем печальную картину — нужные нам модули продают за денежку :((
Мы пойдем другим путем.

1. Лезем в catalog/controller/module/latest.php
перед

protected function index($setting) {<

добавляем:

private function _endc( $array ) { return end( $array ); }

2. потом, перед

$results = $this->model_catalog_product->getProducts($data);

вставляем:

if ((isset($this->request->get['route'])) AND ($this->request->get['route'] == 'product/category'))
        {
            $category_id = $this->_endc(explode('_', (string)$this->request->get['path']));        
            $data['filter_category_id'] = $category_id;
            $data['filter_sub_category'] = TRUE;
        }
        
        
        if ((isset($this->request->get['route'])) AND (isset($this->request->get['manufacturer_id'])) AND ($this->request->get['route'] == 'product/manufacturer/product'))
        {
            $manufacturer_id = $this->request->get['manufacturer_id'];        
            $data['filter_manufacturer_id'] = $manufacturer_id;            
        }

И теперь на странице категории — новинки только из нее. А бонусом та же песня и со страничкой производителей.

За модуль спасибо aduakasoft.com, кажется только они решились выложить своё решение бесплатно на opencart.com

Оставите комментарий ?

24 Комментарии。

  1. avatar Алексей

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

  2. avatar Евгений

    Отличное решение! Работает на «ура». Спасибо. Однако, хотелось бы посоветоваться с Вами, ибо не знаю как осуществить проверку. Есть такой случай, когда некоторые категории в магазине пустуют, то есть товаров в них нет, но все равно они нужны. В таком случае модуль «Последние» все равно выводится, а точнее его заголовок. Как можно модифицировать приведенный Вами выше код, чтобы модуль не выводился для пустых категорий?

  3. все просто:
    в темплейте модуля, если работаем с массивом $products, как в вашем случае, — в начале добавляем

    < ?php if ($products) { ?>
    и в конце:

    < ?php } ?>

    продуктов нет — модуль не покажется.
    В других модулях — аналогично проверяем $categories, $manufaturers, $message и тд

    но! если не сработает — нужно проверить, нет ли лишнего в common темплейтах: column_left, _right, content_bottom, _top
    а то некоторые умельцы там оформления модулей пилят.

  4. 2Алексей, получайте $category_id из формы, а не из пути, будет вам счастье)

  5. Не работает для «Лидеры продаж»

  6. Спасибо понравилось!

  7. А можно такую же штуку сделать в самом товаре ? . Т.е. в моем случае, я зашел, например, в запчасть которая относится к определенному автомобилю, и сбоку отображается модуль последние в котором представлены последние товары для этой модели авто.

  8. Писалось в 2012 году, так что не знаю как сейчас в этих модулях дела обстоят, но по идее
    если дописать
    if ((isset($this->request->get['route'])) AND ($this->request->get['route'] == 'product/product'))
    {
    $category_id = $this->_endc(explode('_', (string)$this->request->get['path']));
    $data['filter_category_id'] = $category_id;
    $data['filter_sub_category'] = TRUE;
    }

    должно получиться то, что вы хотите.

  9. Vor 17.03.2014 в 23:22 [Правка]
    Не работает для «Лидеры продаж»

    На дату посмотрите)

  10. Не сработало выдает ошибку undefined index в этой строке $category_id = $this->_endc(explode(‘_’, (string)$this->request->get[‘path’]));

  11. Не удержался, проверил. Опенкарт 1.5.5.1.2, модуль latest (Последние).

    Все работает.

  12. :smile: а у меня все равно не работает.

    if ((isset($this->request->get['route'])) AND ($this->request->get['route'] == 'product/category'))
    {
    $category_id = $this->_endc(explode('_', (string)$this->request->get['path']));
    $data['filter_category_id'] = $category_id;
    $data['filter_sub_category'] = TRUE;
    }

    if ((isset($this->request->get['route'])) AND (isset($this->request->get['manufacturer_id'])) AND ($this->request->get['route'] == 'product/manufacturer/product'))
    {
    $manufacturer_id = $this->request->get['manufacturer_id'];
    $data['filter_manufacturer_id'] = $manufacturer_id;
    }
    if ((isset($this->request->get['route'])) AND ($this->request->get['route'] == 'product/product'))
    {
    $category_id = $this->_endc(explode('_', (string)$this->request->get['path']));
    $data['filter_category_id'] = $category_id;
    $data['filter_sub_category'] = TRUE;
    }

    Вот как код выглядит. Точь в точь с отсюда все. Я на тестовый сайт код вставил. В категориях и брендах все отображается соответственно, а когда выбираешь конкретный товар снова начинает все подряд из последнего кидать.
    Адрес тестового сайта я в поле Сайт написал.

  13. Проверил код opiy на ocStore Версия 1.5.5.1.2
    Все работает!
    Спасибо авторам!

  14. avatar Константин

    Здравствуйте.

    Я не смог запустить это модуль. Выдает ошибку в коде который выложен в теме. Никто не сталкивался. Версия движка 1.5.5.1.2

  15. ошибку то покажите

  16. avatar Константин

    Прошу извинить, руки кривые оказались. Заново код ваш подавил и все нормально стало! :grin: :grin: :grin:

  17. бывает )

  18. avatar Веломир

    А как сделать что бы на оборот что бы не выводило из конкретной категории, у меня на главной странице отображается модуль, мне нужно что бы из категории с ид 90 не отображался товар, как сделать?

  19. avatar Довольный разработчик

    Это гениально)с минимальными правками на 2.1 работают на ура

  20. avatar Довольный разработчик

    А можно подобное для хитов продажи, точнее что зделать с методом getBestSellerProducts

  21. avatar Довольный разработчик

    Спасибо, сам разобрался

  22. avatar Дмитрий

    Для opencart 2 нет такова?

  23. Не довелось нормально поработать с двойкой.
    Год назад она еще очень сырая была, надо будет посмотреть как оно сейчас

  24. Пользовались модом в 1.5.х понравился
    Пытался запустить под OC 2.x
    не сработало, а очень бы хотелось

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>