2013-11-01 25 views
0

我想用xdebug的phpstorm来穿过magento代码。特别是,我试图了解layout对象的xml是如何形成的。有代码从generateXML中调用,然后该代码调用simplexml_load_string($ layout updates)。 $ layout更新只是一个简短的xml字符串数组,然后这些字符串被内化形成一个连接字符串。simplexml_load_string()如何在Magento中以正确的顺序创建布局块?

但是随后调用了simplexml_load_string,我无法调试它,因为它内置了一个php,并且在遍历该行后,$ xml自动生成。

此外simplexml_load_string传递一个布局元素对象,该对象扩展了扩展SimpleXMLElement的Varien_Simplexml。我很困惑,在这个问题上发生了什么。任何人都可以解释给我吗?谢谢。

回答

1

在单个堆栈溢出问题中很难解释 - 如果您希望以较低压缩的方式详细说明详细信息,请参阅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.xmlcatalog.xml等;最后保存local.xml)放入一个称为包布局的巨大XML对象中。然后,Magento会遍历由Magento的其他部分指定的每个布局“句柄”(default,cms_index_index等),并查找与每个句柄名称匹配的包XML布局节点。当它找到每个这些节点时,它们都被添加到更新数组中。

因此,对于您的名义问题,顺序受两件事情的影响。首先,句柄的顺序 - 所有default句柄节点首先被加载到更新数组中,然后是STORE_default,然后是完整的动作句柄更新(cms_index_index)等等。第二,命令中包含了为什么PHP返回子XML的方式节点。这是当前(并可能保留)节点出现/被添加到 XML文档的顺序。