我在至少一个布局xml文件中看到使用<layoutUpdate>
xml节点代替典型的<layout version="0.1.0">
节点。我已经搜索了互联网以及我所拥有的任何Magento Layout书籍和文档,但我找不到对此的解释。我最初认为它应用更新的顺序有所不同,但在进一步测试后似乎并非如此。有人可以解释两者之间的差异(如果有的话)吗?
谢谢!
典型布局更新XML文件结构:
<?xml version="1.0"?>
<layout version="0.1.0">
<some_handle>
<reference name"some-block">
...
</reference>
</some_handle>
</layout>
一个似乎仍然有用的不同版本:
<?xml version="1.0"?>
<layoutUpdate>
<some_handle>
<reference name"some-block">
...
</reference>
</some_handle>
</layoutUpdate>
这两个之间是否有任何功能差异?
答案 0 :(得分:3)
标签应为<layout />
。但是,在当前版本的Magento(以及可能的未来版本)中,此标记的名称无关紧要。这些文件都合并到一个XML树中。 Magento用于将这些文件加载到单个树中的代码如下所示
$fileStr = file_get_contents($filename);
$fileStr = str_replace($this->_subst['from'], $this->_subst['to'], $fileStr);
$fileXml = simplexml_load_string($fileStr, $elementClass);
if (!$fileXml instanceof SimpleXMLElement) {
continue;
}
$layoutStr .= $fileXml->innerXml();
最后一行($fileXml->innerXml();
)是我们感兴趣的那一行。 innerXml
方法的工作方式与同名的浏览器DOM方法相同。所有子节点都将被提取为字符串,但根节点将被忽略。您可以将其命名为<layout />
,<layoutUpdate />
,<i♥magento />
。目前没关系。
那就是说,你应该将其命名为<layout />
以避免让人感到困惑。
答案 1 :(得分:2)
模块布局更新XML文件包含根节点<layout />
。此根节点包含的任何顶级节点都是布局更新句柄。布局更新句柄用于包含布局更新XML指令集。根据我的知识,从未评估根节点的版本号。
布局更新句柄基本上是任意的,可以是任何XML安全字符串。根据处理请求的控制器操作如何或是否使用布局更新,某些布局更新句柄将被调用到范围中。
有关相关方法的详细信息,请参阅以下内容:
Mage_Core_Controller_Varien_Action
个loadLayout()
和renderLayout()
方法,Mage_Core_Model_Layout
和Mage_Core_Model_Layout_Update
。