从模块更新前端布局

时间:2009-06-29 15:11:54

标签: php xml magento

我已经创建了自己的magento模块并成功扩展了核心控制器和模型,但是我在布局xml文件时遇到了同样的问题。我想更新结帐多件装运页面。到目前为止,我只是设法覆盖整个checkout.xml文件,但我更喜欢只在我的xml文件中。

这就是我的模块config.xml中的内容,tm.xml文件位于app / design / frontend / default / default / layout /

<frontend>
        <layout>
            <updates>
                    <checkout>
                         <file>tm.xml</file>
            </checkout>
        </updates>
    </layout>
</frontend>

由于

1 个答案:

答案 0 :(得分:3)

  

更新:下面的文字指的是在app/design文件夹之外存储模板和XML文件的方法。多年来,这个答案写完后,我的Magento核心团队强烈反对这一点。他们甚至在应用程序级别使用代码强制执行此操作,并继续阻止新技术的开发。这是非常沮丧的,但是由于历史原因,我将离开答案。

首先,您可能需要考虑将布局文件放在模块中的某个位置。我不确定这种做法有多广泛,但从分发的角度来看它是有道理的。它还确保您的布局覆盖将适用,即使有人将主题从默认更改。做这样的事情应该有效

<file>../../../../../code/local/Packagename/Modulename/layouts/tm.xml</file>

其次,正如您所指出的,使用上面的XML,您将完全替换magento安装中的checkout.xml。你不想这样做。相反,您希望添加您的布局更新(该XML文件的内容)到Magento的可用更新列表。所以做这样的事情。

<layout>
    <updates>
        <my_package_my_module_name>                     
            <file>../../../../../code/local/Packagename/Modulename/layouts/tm.xml</file>
        </my_package_my_module_name>
    </updates>
</layout>        

这里的重大变化是我们已经改变了&lt; checkout&gt;是&lt; my_package_my_module_name&gt;。 Magento将本节中指定的全部加载到称为包布局的内容中。因此,您的XML将与checkout.xml中的XML一起生效。

在tm.xml中,您将为多次发货设置特定规则

<layout version="0.1.0">
    <checkout_multishipping>
        <!-- ... -->
    </checkout_multishipping>

    <checkout_multishipping_login>
        <!-- ... -->
    </checkout_multishipping_login>
</layout>

这里要记住的重要一点是,checkout.xml中用于多次发货的现有规则仍然存在。你需要写&lt; reference /&gt;规则来覆盖那些规则正在做的事情。这就是Magento布局系统的工作原理。如果您还没有,我建议您查看Magento Designer's Guide,尤其是Intro to Layouts部分。

最后一点说明,你提到你是在重写控制器。如果您要查看多运输控制器,则需要使用&lt; checkout_multishipping&gt;标签,你需要使用与控制器上该页面的动作控制器/动作方法组合名称相匹配的标签

<packagename_modulename_actioncontrollername_action />