我有许多类别,我需要使用与标准类别布局不同的布局。在不必在管理区域的“自定义设计”选项卡中重复XML代码的情况下,最好的方法是什么?我需要做的每个类别都是“品牌”,所以我想这可以作为magento识别需要使用替代模板的常用方式吗?
此时感谢任何帮助。
由于
答案 0 :(得分:4)
您可以定义自定义布局句柄并在特定类别中调用它。
首先,定义布局句柄(例如在主题的local.xml中):
<layout>
<my_awesome_update>
<block ..../>
</my_awesome_update>
</layout>
然后,在后端的类别编辑页面中,只需进入“自定义布局更新”:
<update handle="my_awesome_update" />
答案 1 :(得分:1)
如果您知道类别的ID,您可以在local.xml布局文件中定义所有更改,如下所示:
<layout>
<CATEGORY_4>
<!-- updates here -->
</CATEGORY_4>
</layout>
答案 2 :(得分:0)
另一种选择是使用&#34; Page Layout&#34;菜单,虽然它需要一些额外的工作。
首先,创建一个新的扩展来添加布局和观察者(有许多教程用于创建扩展;为简洁起见,这里省略了)。在新扩展程序的config.xml
文件中(我使用Bats_Coreextend
作为参考):
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Bats_Coreextend>
<version>0.1.0</version>
</Bats_Coreextend>
</modules>
<global>
<events>
<controller_action_layout_load_before>
<observers>
<addCategoryLayoutHandle>
<class>Bats_Coreextend_Model_Observer</class>
<method>addCategoryLayoutHandle</method>
</addCategoryLayoutHandle>
</observers>
</controller_action_layout_load_before>
</events>
<page>
<layouts>
<alt_category module="page" translate="label">
<label>Alt. Category (Desc. at bottom)</label>
<template>page/alt-category.phtml</template>
<layout_handle>page_alt_category</layout_handle>
</alt_category>
</layouts>
</page>
</global>
</config>
这将创建新的布局,并允许您在菜单中引用它,如上图所示。我们需要观察者,因为不幸的是,即使设置了页面布局(如上所示),您也无法引用XML中的句柄(例如catalog.xml)
要解决此问题,请创建观察者函数:
创建app/code/local/Bats/Coreextend/Model/Observer.php
在该文件中:
<?php
class Bats_Coreextend_Model_Observer extends Mage_Core_Model_Observer {
public function addCategoryLayoutHandle(Varien_Event_Observer $observer)
{
/** @var Mage_Catalog_Model_Category|null $category */
$category = Mage::registry('current_category');
if(!($category instanceof Mage_Catalog_Model_Category)) {
return;
}
if($category->getPageLayout()) {
/** @var Mage_Core_Model_Layout_Update $update */
$update = $observer->getEvent()->getLayout()->getUpdate();
/** NOTE: May want to add an additional
* conditional here as this will also cause the
* layout handle to appear on product pages that
* are within the category with the alternative
* layout.
*/
$update->addHandle($category->getPageLayout());
}
}
}
这会将alt_category
句柄添加到我们的布局中,以便可以引用它,并且您可以对页面进行必要的更改。
最后,请务必如上所述创建模板文件(即page/alt-category.phtml
)。