0

我正在尝试将 phpstorm 与 xdebug 一起使用来逐步执行 magento 代码。特别是,我试图了解布局对象的 xml 是如何形成的。有从 generateXML 中调用的代码,然后该代码调用 simplexml_load_string($layout 更新)。$layout 更新只是一个短 xml 字符串数组,然后内爆形成一个连接的字符串。

但是随后调用了 simplexml_load_string,我无法调试它,因为它是内置的 php,并且在单步执行该行之后,会自动生成 $xml。

还向 simplexml_load_string 传递了一个布局元素对象,该对象扩展了扩展 SimpleXMLElement 的 Varien_Simplexml。我对那个引擎盖下发生的事情感到困惑。谁能给我解释一下?谢谢。

4

1 回答 1

1

在一个 Stack Overflow 问题中很难解释——如果你想以一种不那么压缩的方式获得完整的细节,No Frills Magento Layout将详细介绍布局系统的功能。(自我链接,我写和出售的书,但老实说,我不知道有更好的资源)

虽然高级别的听起来像您有两个问题:更新数组是如何填充的,以及为什么简单 XML 对象是一个Varien_Simplexml对象。

首先回答第二个问题,当 Magento 实例化它的 SimpleXML 对象时,它使用了鲜为人知的and$class_name参数。这是一个PHP特性,它允许用户指定什么样的对象应该代表 SimpleXML 节点。Magento 传入 string ,这意味着 PHP 尝试将这些函数返回的每个对象创建为一个对象。 扩展了基础对象,这意味着这些 XML 对象的行为与普通 PHP对象完全相同,只是 它们还具有.simplexml_load_stringsimplexml_load_fileVarien_SimplexmlVarien_SimplexmlVarien_SimplexmlSimpleXMLSimpleXMLVarien_Simplexml

至于以“正确的顺序”加载更新,这里是更新数组的填充方式。首先,Magento 将主题中的所有布局 XML 文件(page.xml,catalog.xml等;local.xml最后保存)加载到称为包布局的单个巨型 XML 对象中。然后,Magento 遍历 Magento的其他部分指定的每个布局“句柄”( , 等),并查找与每个句柄名称匹配的包 XML 布局节点defaultcms_index_index当它找到这些节点中的每一个时,它们被添加到更新数组中。

因此,对于您的名义问题,顺序受两件事影响。首先,句柄的顺序——首先将所有default句柄节点加载到更新数组中,然后是STORE_default,然后是完整的操作句柄 update( cms_index_index),等等。其次,顺序包括 PHP 返回子 XML 节点的方式的原因。这是当前(并且可能会保留)节点出现/添加到XML 文档的顺序。

于 2013-11-01T22:09:14.357 回答