Prestashop:如果父类别为空,则显示来自childcategories的产品

时间:2012-08-08 22:34:09

标签: categories prestashop

请帮我解决以下问题:

我的网站在选择类别时会显示相应的子类别,并显示消息“此类别中没有产品”。钻取时会发生这种情况,直到一个人到达较低级别的子类别。

我想展示其子类别的所有产品。

我该怎么办呢?

非常感谢您的建议,

史蒂文

5 个答案:

答案 0 :(得分:3)

打开/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并从

更改public function getProducts内SQL查询的WHERE CLAUSE行
    WHERE cp.`id_category` = '.(int)$this->id.($active ? ' AND p.`active` = 1' : '').'

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

答案 1 :(得分:2)

您无需更改任何内容即可实现此目的。

只需将产品分配给它所在的子类别,但也要分配给父类别(在BO中的产品编辑中)。

答案 2 :(得分:2)

您也可以安装分层导航模块(blocklayered)。此模块的默认行为是显示子类别产品,即使选择器窗口小部件在页面上不可见/活动。

答案 3 :(得分:1)

在categoryController.php中,您可以找到process()方法。这是获取类别页面上显示的所有信息的那个。你会发现一个存储所有产品的变量(我认为它是$cat_product,如果我的记忆力很好)。您可以轻松检查它是否为空。然后从这里你只需要获得子类别(在类别类中有一个方法),然后获得这些类别的产品(还有一种方法来获取类别的产品)。这只是您必须遵循的逻辑,并且您需要的所有代码已经在框架中。

答案 4 :(得分:-1)

在主标题菜单上添加新类别非常简单,只需转到模块 - Pos Megamenu Customer并添加您想要的任何内容。

完成!!