在一个 Stack Overflow 问题中很难解释——如果你想以一种不那么压缩的方式获得完整的细节,No Frills Magento Layout将详细介绍布局系统的功能。(自我链接,我写和出售的书,但老实说,我不知道有更好的资源)
虽然高级别的听起来像您有两个问题:更新数组是如何填充的,以及为什么简单 XML 对象是一个Varien_Simplexml
对象。
首先回答第二个问题,当 Magento 实例化它的 SimpleXML 对象时,它使用了鲜为人知的and$class_name
参数。这是一个PHP特性,它允许用户指定什么样的对象应该代表 SimpleXML 节点。Magento 传入 string ,这意味着 PHP 尝试将这些函数返回的每个对象创建为一个对象。 扩展了基础对象,这意味着这些 XML 对象的行为与普通 PHP对象完全相同,只是 它们还具有.simplexml_load_string
simplexml_load_file
Varien_Simplexml
Varien_Simplexml
Varien_Simplexml
SimpleXML
SimpleXML
Varien_Simplexml
至于以“正确的顺序”加载更新,这里是更新数组的填充方式。首先,Magento 将主题中的所有布局 XML 文件(page.xml
,catalog.xml
等;local.xml
最后保存)加载到称为包布局的单个巨型 XML 对象中。然后,Magento 遍历 Magento的其他部分指定的每个布局“句柄”( , 等),并查找与每个句柄名称匹配的包 XML 布局节点default
。cms_index_index
当它找到这些节点中的每一个时,它们被添加到更新数组中。
因此,对于您的名义问题,顺序受两件事影响。首先,句柄的顺序——首先将所有default
句柄节点加载到更新数组中,然后是STORE_default
,然后是完整的操作句柄 update( cms_index_index
),等等。其次,顺序包括 PHP 返回子 XML 节点的方式的原因。这是当前(并且可能会保留)节点出现/添加到包XML 文档的顺序。