Layout 如何在产品视图页面中显示类别自定义设计布局?

Layout 如何在产品视图页面中显示类别自定义设计布局?,layout,magento,Layout,Magento,假设我有两个类别,A和B 我将A设置为在目录->目录类别->单击类别->单击自定义设计选项卡上使用“布局” 我将B设置为在目录->目录类别->单击类别->单击自定义设计选项卡上使用“布局” 当我访问类别A和B时,他们使用我在管理面板上设置的自己的布局显示产品。当我单击产品列表页面上的项目时,产品视图页面不使用自定义设计 如何强制产品视图页面使用其类别的自定义设计?您可以在产品目录>管理产品>设计中应用自定义设计更新,然后根据类别应用 这能满足你的需要吗?我自己找到了答案 打开位于/app/cod

假设我有两个类别,A和B

我将A设置为在目录->目录类别->单击类别->单击自定义设计选项卡上使用“布局”

我将B设置为在目录->目录类别->单击类别->单击自定义设计选项卡上使用“布局”

当我访问类别A和B时,他们使用我在管理面板上设置的自己的布局显示产品。当我单击产品列表页面上的项目时,产品视图页面不使用自定义设计


如何强制产品视图页面使用其类别的自定义设计?

您可以在产品目录>管理产品>设计中应用自定义设计更新,然后根据类别应用


这能满足你的需要吗?

我自己找到了答案

  • 打开位于/app/code/Mage/Catalog/controllers/ProductController.php中的产品控制器

  • 将以下代码添加到_initProductLayout方法中

    $update->addHandle('CATEGORY'.$product->getCategoryId())

  • 打开位于/app/design/frontend/default/default/layout/catalog.xml中的目录布局xml

  • 添加

  • 
    你的模板在这里
    

    在当前版本的Magento中,有另一种方法可以做到这一点,而无需更改核心代码。假设您有一个用于类别产品显示的自定义模板。在管理中,转到目录->类别->管理类别,然后选择要应用修改后的产品模板的类别。将“应用于产品”更改为“是”,并将以下内容放入自定义布局更新中

    <reference name="product.info">
      <action method="setTemplate"> <template>catalog/product/NEW_VIEW.phtml</template></action>
    </reference>
    
    
    目录/产品/新视图.phtml
    

    其中NEW_VIEW是要使用的新模板的名称。如果您有子类别,您可能需要将其“使用父类别设置”设置为“是”,以使其浮动。

    使用下拉类型和名称属性代码“which_Category”创建属性。在选项选项卡上填写“类别a”和“类别b”

    在/app/design/frontend/default/YOURTEMP/template/catalog/product中创建两个文件/

    比如说:view_cat_a.phtml和view_cat_b.phtml

    您可以基于view.phtml设计特定类别的产品视图页面

    将view.phtml更改为:

    <?php 
    $_helper = $this->helper('catalog/output'); 
    $_product = $this->getProduct();
        if ( $_product->getAttributeText('which_category') == category_a) {
            include('view_cat_a.phtml');
        } else {
            include('view_cat_b.phtml');
        }
    

    你的意思是“我将B设置为在…”上使用'layout_B':)差不多,但不完美。我只想根据类别应用自定义设计。如果我在产品目录->管理产品->设计中设置自定义设计,则产品将使用我设置的布局。假设我有一个属于类别a和类别B的产品。如果我为该产品设置布局B,当客户单击类别->该产品时,如何使其使用布局a?
    
    <?php 
    $_helper = $this->helper('catalog/output'); 
    $_product = $this->getProduct();
        if ( $_product->getAttributeText('which_category') == category_a) {
            include('view_cat_a.phtml');
        } else {
            include('view_cat_b.phtml');
        }