在单个堆栈溢出问题中很难解释 - 如果您希望以较低压缩的方式详细说明详细信息,请参阅No Frills Magento Layout详细说明布局系统的功能。 (自我链接,我写和出售的书,但我真的不知道更好的资源)
尽管听起来像是有两个问题:如何填充更新数组,以及为什么Simple XML对象一个Varien_Simplexml
对象。
首先回答第二个问题,当Magento实例化其SimpleXML对象时,它使用的参数和simplexml_load_file
。这是一个PHP功能,它允许用户指定什么样的对象应该代表SimpleXML节点。 Magento传入字符串Varien_Simplexml
,这意味着PHP会尝试将这些函数返回的每个对象创建为Varien_Simplexml
对象。 Varien_Simplexml
扩展了基础对象SimpleXML
,这意味着这些XML对象的行为与正常的PHP SimpleXML
对象的行为完全相同,除了,它们还具有由Varien_Simplexml
定义的其他方法。对于以“正确的顺序”加载更新,以下是更新数组的填充方式。首先,Magento加载所有主题中的布局XML文件(page.xml
,catalog.xml
等;最后保存local.xml
)放入一个称为包布局的巨大XML对象中。然后,Magento会遍历由Magento的其他部分指定的每个布局“句柄”(default
,cms_index_index
等),并查找与每个句柄名称匹配的包XML布局节点。当它找到每个这些节点时,它们都被添加到更新数组中。
因此,对于您的名义问题,顺序受两件事情的影响。首先,句柄的顺序 - 所有default
句柄节点首先被加载到更新数组中,然后是STORE_default
,然后是完整的动作句柄更新(cms_index_index
)等等。第二,命令中包含了为什么PHP返回子XML的方式节点。这是当前(并可能保留)节点出现/被添加到包 XML文档的顺序。