Prestashop: отображать товары из дочерних категорий, если родительская категория пуста

Пожалуйста, помогите мне со следующим:

Мой веб-сайт показывает при выборе категории соответствующие подкатегории и сообщение «в этой категории нет товаров». Это происходит во время детализации до тех пор, пока не будет достигнута подкатегория более низкого уровня.

Вместо этого я хотел бы показать все продукты его подкатегорий.

Как я могу это сделать, пожалуйста?

Большое спасибо за ваш совет,

Стивен


person user1586105    schedule 08.08.2012    source источник


Ответы (5)


Откройте /controllers/CategoryController.php и добавьте приведенный ниже код в метод process(), обратите внимание на комментарии, говорящие вам, где начать и закончить добавление кода.

public function process()
{
    ....
            }
            if ($this->category->id != 1)
                $this->productListAssign();

            /* MODIFICATION STARTS HERE */  
            if(!(isset($this->cat_products) AND $this->cat_products) ){ 
                $this->category->id=array();
                foreach($subCategories as $k=>$v){
                    $this->category->id[]=$v['id_category'];
                }
                $this->productListAssign();

            }
            /* MODIFICATION ENDS HERE */    

            self::$smarty->assign(array( ...
}

Затем откройте classes/Category.php и измените строку WHERE CLAUSE запроса SQL внутри public function getProducts с

    WHERE cp.`id_category` = '.(int)$this->id.($active ? ' AND p.`active` = 1' : '').'

TO

    WHERE cp.`id_category` '.(is_array($this->id)?" IN(".implode(',',$this->id).") ": "=".(int)$this->id).($active ? ' AND p.`active` = 1' : '').'
person Neo    schedule 13.11.2012

Вам не нужно ничего менять, чтобы добиться этого.

Просто назначьте продукт не только в подкатегорию, в которой он находится, но и в родительские категории (в редактировании продукта в BO).

person Koko    schedule 15.07.2013
comment
Любой способ сделать это автоматически? - person manuel-84; 06.06.2018

Вы также можете просто установить многоуровневый навигационный модуль (блочный). По умолчанию этот модуль показывает продукты подкатегорий, даже если селектор-виджет не отображается/активен на страницах.

person Drewes    schedule 02.11.2013

В категорииController.php вы можете найти метод process(). Это тот, который получает всю информацию, отображаемую на страницах категорий. Вы найдете переменную (кажется, она называется $cat_product, если мне не изменяет память), в которой хранятся все продукты. Вы можете легко проверить, пуст он или нет. Затем отсюда вам просто нужно получить подкатегории (для этого есть метод в классе категории), а затем получить продукт этих категорий (есть также метод для получения продуктов категории). Это просто логика, которой вы должны следовать, и ведь весь код, который вам нужен, уже находится во фреймворке.

person romainberger    schedule 19.08.2012

Очень просто добавить новую категорию в главное меню заголовка, просто перейдите к модулям - Pos Megamenu Customer и добавьте все, что хотите.

Сделанный!!

person Christos    schedule 26.10.2015