更新:下面的文字是指一种在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>
这里最大的变化是我们将 <checkout> 更改为 <my_package_my_module_name>。Magento 将本节中指定的所有XML 加载到称为包布局的东西中。因此,您的 XML 将与 checkout.xml 中的 XML 并存。
在 tm.xml 中,您将设置您的特定规则以进行多重运输
<layout version="0.1.0">
<checkout_multishipping>
<!-- ... -->
</checkout_multishipping>
<checkout_multishipping_login>
<!-- ... -->
</checkout_multishipping_login>
</layout>
这里要记住的重要一点是,checkout.xml 中用于多运输的现有规则仍然存在。您需要编写 <reference /> 规则来覆盖这些规则正在执行的操作。这就是 Magento 的布局系统的工作原理。如果您还没有,我建议您查看Magento 设计师指南,尤其是“布局介绍”部分。
最后一点,您提到您正在覆盖控制器。如果您正在验证多运输控制器,则需要使用 <checkout_multishipping> 标签,您需要使用与控制器上该页面的操作控制器/操作方法组合的名称相匹配的标签
<packagename_modulename_actioncontrollername_action />