単一のスタック オーバーフローの質問で説明するのはちょっと難しいです。完全な詳細をあまり圧縮しない方法で説明したい場合は、No Frills Magento Layoutでレイアウト システムの機能を詳細に説明します。(自己リンク、私が書いて販売している本ですが、正直なところ、より良いリソースを知りません)
大まかに言えば、2 つの質問があるように聞こえます。updates 配列はどのように設定されているのか、単純な XML オブジェクトはなぜオブジェクトなのかというVarien_Simplexml
ことです。
最初に 2 番目の質問に答えます。Magento がその SimpleXML オブジェクトをインスタンス化するとき、あまり知られていない$class_name
パラメータsimplexml_load_string
and を使用しますsimplexml_load_file
。これは、SimpleXML ノードを表すオブジェクトの種類をユーザーが指定できるようにするPHP機能です。Magento は string を渡しますVarien_Simplexml
。これは、PHP がこれらの関数によって返される各オブジェクトをオブジェクトとして作成しようとすることを意味しVarien_Simplexml
ます。 Varien_Simplexml
つまり、これらの XML オブジェクトは通常の PHPオブジェクトとまったくSimpleXML
同じように動作しますが 、 で定義された追加のメソッドも持っています。SimpleXML
Varien_Simplexml
更新を「正しい順序」でロードすることに関しては、その更新配列がどのように読み込まれるかを次に示します。まず、Magento は、テーマ内のすべてpage.xml
のレイアウト XML ファイル ( 、catalog.xml
など。local.xml
最後に保存) を、パッケージ レイアウトと呼ばれる単一の巨大な XML オブジェクトに読み込みます。次に、Magento は、Magento の他の部分によって指定された各レイアウト「ハンドル」( default
、cms_index_index
など) を調べ、各ハンドル名に一致するパッケージ XML レイアウト ノードを探します。これらの各ノードが見つかると、更新配列に追加されます。
したがって、あなたの名誉ある質問に対して、順序は 2 つの影響を受けます。まず、ハンドルの順序 — すべてのdefault
ハンドル ノードが最初に update 配列にロードされ、その後に が続きSTORE_default
、その後に完全なアクション ハンドル update ( cms_index_index
) が続きます。次に、PHP が子 XML ノードを返す方法の順序が含まれます。これは現在 (そして今後も維持される可能性が高い)、ノードがパッケージXML ドキュメントに表示される/追加される順序です。