0

xdebug で phpstorm を使用して、magento コードをステップ実行しようとしています。特に、レイアウト オブジェクトの xml がどのように形成されるかを理解しようとしています。generateXML 内から呼び出されるコードがあり、そのコードは simplexml_load_string( $layout updates) を呼び出します。$layout の更新は、短い xml 文字列の単なる配列であり、連結された文字列を形成するために内破されます。

しかし、次に simplexml_load_string が呼び出され、php が組み込まれているためデバッグできず、その行をステップ実行した後、$xml が自動的に生成されます。

また、simplexml_load_string には、SimpleXMLElement を拡張する Varien_Simplexml を拡張するレイアウト要素オブジェクトが渡されます。そのボンネットの下で何が起こっているのか、私は混乱しています。誰かが私にそれを説明できますか?ありがとう。

4

1 に答える 1

1

単一のスタック オーバーフローの質問で説明するのはちょっと難しいです。完全な詳細をあまり圧縮しない方法で説明したい場合は、No Frills Magento Layoutでレイアウト システムの機能を詳細に説明します。(自己リンク、私が書いて販売している本ですが、正直なところ、より良いリソースを知りません)

大まかに言えば、2 つの質問があるように聞こえます。updates 配列はどのように設定されているのか、単純な XML オブジェクトはなぜオブジェクトなのかというVarien_Simplexmlことです。

最初に 2 番目の質問に答えます。Magento がその SimpleXML オブジェクトをインスタンス化するとき、あまり知られていない$class_nameパラメータsimplexml_load_stringand を使用しますsimplexml_load_file。これは、SimpleXML ノードを表すオブジェクトの種類をユーザーが指定できるようにするPHP機能です。Magento は string を渡しますVarien_Simplexml。これは、PHP がこれらの関数によって返される各オブジェクトをオブジェクトとして作成しようとすることを意味しVarien_Simplexmlます。 Varien_Simplexmlつまり、これらの XML オブジェクトは通常の PHPオブジェクトとまったくSimpleXML同じように動作しますが 、 で定義された追加のメソッドも持っています。SimpleXMLVarien_Simplexml

更新を「正しい順序」でロードすることに関しては、その更新配列がどのように読み込まれるかを次に示します。まず、Magento は、テーマ内のすべてpage.xmlのレイアウト XML ファイル ( 、catalog.xmlなど。local.xml最後に保存) を、パッケージ レイアウトと呼ばれる単一の巨大な XML オブジェクトに読み込みます。次に、Magento は、Magento の他の部分によって指定された各レイアウト「ハンドル」( defaultcms_index_indexなど) を調べ、各ハンドル名に一致するパッケージ XML レイアウト ノードを探します。これらの各ノードが見つかると、更新配列に追加されます。

したがって、あなたの名誉ある質問に対して、順序は 2 つの影響を受けます。まず、ハンドルの順序 — すべてのdefaultハンドル ノードが最初に update 配列にロードされ、その後に が続きSTORE_default、その後に完全なアクション ハンドル update ( cms_index_index) が続きます。次に、PHP が子 XML ノードを返す方法の順序が含まれます。これは現在 (そして今後も維持される可能性が高い)、ノードがパッケージXML ドキュメントに表示される/追加される順序です。

于 2013-11-01T22:09:14.357 に答える