我正在创建一个自定义页面布局。我已经将必要的XML添加到模块的config.xml文件中,创建了模板,并且模板可以在Admin中选择。
我似乎无法用布局句柄修改页面布局。通过修改,我的意思是将JS添加到头部,添加一个body类等等。在我的config.xml中,我有以下内容:
<config>
<frontend>
....
<layout>
<updates>
<mymodule_layout>
<file>mymodule.xml</file>
</mymodule_layout>
</updates>
</layout>
</frontend>
...
<global>
<page>
<layouts>
<mymodlue_pagelayout module="page" translate="label">
<label>My Module - A Custom Layout</label>
<template>page/customlayouttest.phtml</template>
<layout_handle>mymodlue_pagelayout</layout_handle>
</mymodlue_pagelayout>
</layouts>
</page>
....
</global>
</config>然后在mymodule.xml中,我有下面的XML。都不管用。当我访问我的页面布局应用的类别时,下面的任何更改都不会生效。我遗漏了什么?
<mymodlue_pagelayout translate="label">
<label>My Module - A Custom Layout</label>
<reference name="root">
<action method="setTemplate"><template>page/customlayouttest.phtml</template></action>
<!-- Mark root page block that template is applied -->
<action method="setIsHandle"><applied>1</applied></action>
<action method="addBodyClass"><className>grid-4</className></action>
<action method="addBodyClass"><className>stl-category</className></action>
</reference>
<reference name="product_list">
<action method="setTemplate"><template>catalog/product/list-alternate.phtml</template></action>
<action method="setData"><name>list_golfers</name><value>true</value></action>
</reference>
<reference name="product_list_toolbar">
<action method="setDefaultGridPerPage"><limit>15</limit></action>
<action method="addPagerLimit"><mode>grid</mode><limit>15</limit></action>
<action method="addPagerLimit"><mode>grid</mode><limit>all</limit></action>
</reference>
<reference name="head">
<action method="addJs"><script>jquery/jquery-1.7.1-min.js</script></action>
<action method="addJs"><script>varien/product.js</script></action>
<action method="addJs"><script>varien/configurable.js</script></action>
<action method="addJs"><script>amasty/amconf/configurable.js</script></action>
<action method="addJs"><script>jquery/magiczoom.js</script></action>
<action method="addJs"><script>prototype/window.js</script></action>
<action method="addJs"><script>jquery/jquery-magnificPopup.0.9.9.js</script></action>
</reference>
</mymodlue_pagelayout>发布于 2014-09-08 17:07:05
这个问题的简单答案是Magento根本不使用类别页面布局句柄中的信息,它实际上被忽略了。Alan在一个类似的问题中给我们提供了一个解释:https://stackoverflow.com/a/20257191/2124039。
虽然我们现在知道为什么布局句柄不能工作,但是我们仍然需要一个解决方案-how --我们用布局句柄修改页面布局吗?我找到了最简单的解决方案,就是创建一个侦听事件controller_action_layout_load_before的观察者,确定正在查看的页面是否是类别页,然后将布局句柄添加到我们正在使用的布局页面的布局对象(如果有的话)。
它是作为独立模块构建的,如下所示:
config.xml
<config>
<modules>
<Callmetwan_CategoryLayoutHandler>
<version>1.0.0.0</version>
</Callmetwan_CategoryLayoutHandler>
</modules>
<frontend>
<events>
<controller_action_layout_load_before>
<observers>
<pm_shopthelook_model_observer>
<class>Callmetwan_CategoryLayoutHandler_Model_Observer</class>
<method>addCustomHandles</method>
</pm_shopthelook_model_observer>
</observers>
</controller_action_layout_load_before>
</events>
</frontend>
</config>observer.php:
class Callmetwan_CategoryLayoutHandler_Model_Observer extends Varien_Object
{
public function addCustomHandles($observer) {
$pageConfig = (object) Mage::getModel('page/config');
$allLayoutHandles = (array) $pageConfig->getPageLayoutHandles();
// Determine if we are in a category
$category = Mage::registry('current_category');
$product = Mage::registry('current_product');
if ($category && !$product)
{
// Get all design settings applied to current category
$design = (object) Mage::getSingleton('catalog/design')->getDesignSettings($category);
// Get current page layout current category is using
$pageLayout = (string) $design->getPageLayout();
foreach ($allLayoutHandles as $layout => $handle)
{
// Cycle through each layout to find current layout, then add current page's layout handle to the layout object
if ($pageLayout === $layout)
{
$update = (object) Mage::getSingleton('core/layout')->getUpdate();
$update->addHandle($handle);
break;
}
}
}
}
}简单地说,您将得到两个独立的模块。布局页面将是一个模块的一部分(使用问题中的示例,它将是Mymodule),它将定义一个自定义mymyodule.xml布局文件,该文件包含布局页面的所有更新。然后,上面的代码(Callmetwan_CategoryLayoutHandler)将负责将布局处理程序添加到布局对象中。
https://stackoverflow.com/questions/25687494
复制相似问题