【问题标题】:Magento <layoutUpdate> vs. <layout>Magento <layoutUpdate> 与 <layout>
【发布时间】:2011-11-29 22:05:00
【问题描述】:

我在至少一个布局 xml 文件中看到使用 &lt;layoutUpdate&gt; xml 节点代替典型的 &lt;layout version="0.1.0"&gt; 节点。我已经搜索了互联网以及我拥有的任何 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>

这两个有什么功能上的区别吗?

【问题讨论】:

    标签: xml layout magento-1.5 magento


    【解决方案1】:

    标签应该是&lt;layout /&gt;。但是,在当前版本的 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-&gt;innerXml();) 是我们感兴趣的,. innerXml 方法的工作方式与浏览器的同名 DOM 方法一样。所有子节点将被提取成一个字符串,但根节点将被忽略。您可以将其命名为 &lt;layout /&gt;&lt;layoutUpdate /&gt;&lt;i♥magento /&gt;。目前没关系。

    也就是说,您应该将其命名为 &lt;layout /&gt; 以避免混淆人们。

    【讨论】:

    • "也就是说,你应该将它命名为 以避免混淆人们。" - 阿门,艾伦!有人应该告诉扩展开发者!感谢您一如既往的回复!
    • 取决于是 ASCII 心还是 UTF-8 心,如果您选择 则确保在 XML 标记中设置正确的字符编码: :)
    【解决方案2】:

    模块布局更新 XML 文件包含根节点 &lt;layout /&gt;。此根节点包含的任何顶级节点都是布局更新句柄。布局更新句柄用于包含布局更新 XML 指令集。从未评估过根节点的版本号(据我所知)。

    布局更新句柄本质上是任意的,可以是任何 XML 安全字符串。根据处理请求的控制器操作如何或是否使用布局更新,某些布局更新句柄会被调用到范围内。

    有关相关方法的更多信息,请参阅以下内容: Mage_Core_Controller_Varien_ActionloadLayout()renderLayout() 方法,Mage_Core_Model_LayoutMage_Core_Model_Layout_Update

    【讨论】:

    • 感谢您的回复。我想我的问题并不清楚。我见过根节点为&lt;layoutUpdate&gt; 而不是&lt;layout&gt; 的XML 文件。我在最初的问题中添加了一些示例以进行澄清。问题是是否有区别,如果有,区别是什么。
    • 你在哪里看到这个被使用了?它可以根据Mage_Core_Model_Layout_Element 遍历。也许是“它存在,但从未使用过”的另一个实例——:-)
    • 在第 3 方扩展中看到它。事实证明,你怎么称呼那个节点并不重要,但为什么要偏离标准呢?
    猜你喜欢
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2013-06-17
    • 2011-08-11
    • 2011-02-12
    • 1970-01-01
    • 2017-09-04
    相关资源
    最近更新 更多