【问题标题】:Magento - Show / hide CMS block when display mode 'Static Block and Products' selected in categoryMagento - 在类别中选择显示模式“静态块和产品”时显示/隐藏 CMS 块
【发布时间】:2010-11-23 12:03:16
【问题描述】:

在我的顶级类别中,我想同时使用静态块和产品以及分层导航。我想使用它的方式是,当未选择任何分层导航选项时,仅显示静态块(toys.phtml),而如果选择了任何选项,则隐藏静态块,仅显示产品(toys.phtml?brand=1)。

有人对此有什么建议吗?我很确定我可以隐藏产品(检查 URL 字符串中的 $_GET 变量),但不确定如何隐藏静态块。

提前致谢。

【问题讨论】:

    标签: php magento catalog


    【解决方案1】:

    您应该修改或覆盖Mage_Catalog_CategoryController (viewAction) 并在$this->renderLayout(); 指令之前添加,添加以下内容:

    if($this->getRequest()->getParam('brand'))
        $this->getLayout()->unsetBlock('yourstaticblockname');
    

    【讨论】:

    • 感谢您的关注,但它没有工作。我进一步研究了它,当为一个类别设置“混合模式”时,它会动态加载块(CreateBlock('cms/block')),块 ID 为 $this->getCurrentCategory()-> getLandingPage() 参见目录/块/类别/view.php (getCmsBlockHtml())。我还注意到该文件中有一些函数,例如 isProductMode()、isContentMode()、isMixedMode()。您是否知道可以根据是否设置参数从控制器设置视图模式的方法。
    • 最简洁的方法是向 Mage_Catalog_Block_Category_View ($_forced_display_mode) 类添加一个属性并从控制器 $this->getLayout()->getBlock('products.listing')->setForcedDisplayMode( Mage_Catalog_Model_Category::DM_PAGE)(只是一个例子)。然后您必须修改 isMixedMode()、isProductMode() 和 isContentMode() 以使 $_forced_display_mode 属性优先于数据库类别属性。让我知道这是否有效。
    • 我实际上找到了另一个解决方案。在您建议放置原始代码的同一位置,我放置了以下 if($category->getLevel()==2){ $category->setDisplayMode('PAGE');它似乎完美地工作,包括在分层导航中选择参数时......
    • Mhm... 是的,它可以这样工作,但是您应该小心更改类别属性,因为该对象可能由事件或 Magento 的某些其他组件保存,并且该属性将持续存在分贝。您只需为单个类别覆盖它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    相关资源
    最近更新 更多