Magentoのデザインをカスタマイズする際に避けて通れない概念に「レイアウトXML」というものがあります。
これはMagento独自の概念で、XMLファイルの定義に基づいてHTML文書を出力するために存在します。

このエントリではレイアウトXMLとはなにか、について少し長い内容になるので、複数回に分けて解説します。

レイアウトXMLとは

レイアウトXMLとは、Magentoで使用する画面定義のためのXMLです。使用するタグの定義はDTDなどに整理されているわけではないので、詳細をしるためにはプログラムを解析しなければなりません。
ですが、使用するタグは比較的決まっているので、いくつかを覚えれば事足りるようになっています。

レイアウトXMLは基本的にエクステンションの単位で作成されます。ファイル名はそれぞれのエクステンションが独自に指定することができるため、厳格なルールは存在しません。
唯一、local.xmlというファイルだけが特殊で、全てのレイアウトXMLが読み込まれた後に読み込まれるカスタマイズ専用のファイルとなっています。 

使用されるタグについて

レイアウトXMLにはいくつかのタグがあらかじめ決められています。

layout

layoutタグはXML宣言に続いて記述される、最上位のタグです。
このタグを定義しないと、エラーになります。 

レイアウトハンドルタグ

レイアウトハンドルタグは2つの概念から成り立っています。

1つはURLと密接に関連したもの。もう1つはメールテンプレートのパーツなどの部分的なレイアウトです。
普段使用するのは前者のほうが多く、例えばTOPページの場合であればレイアウトハンドルは「cms_index_index」 となります。
この定義を知るためには、各エクステンションの中にある、controllersディレクトリのControllerクラスを調べます。
publicメソッドとして定義されているアクションがいくつかあると思いますが、この名称と、エクステンションの別名、Controllerクラス名を小文字にしたものをアンダースコア(_)でつないだものがレイアウトハンドル名になります。

ちなみにエクステンションの別名というのは、各エクステンションのetcディレクトリにある、config.xmlで定義されています。
globalタグの下に、blocks/models/helpers というタグがあり、その直下にエクステンションの別名が定義されています。
controllerについては routers タグで定義しているのでそちらを参照してください。 

blockタグ

blockタグはページ上にblockを配置するために使用します。入れ子にして定義することができます。階層に制限はありません。
このblockタグにはいくつかの属性が定義されていて、

  • name
  • type
  • as
  • template
  • before
  • after

という属性が定義できます。blockタグについては次回詳しく説明します。

referenceタグ

referenceタグは、既に定義されているblockに対して、何かしらの操作をするために使用します。
reference自体が「参照」という意味なので、定義がないblockを呼び出すことはできません。

このタグは、

 

というように使用します。

actionタグ

actionタグはblockタグやreferenceタグの中でのみ使用できるタグです。
このタグはblockタグが持っている、publicメソッドを呼び出すことができます。
たとえばテンプレートファイルの変更などができます。

actionタグについては、blockタグの次の回で説明します。 

removeタグ

removeタグは、定義されているblockを削除するために使用します。
削除した後で、同じ名前でblockを再定義することもできます。

このタグは、

 

のように使用します。

次回はblockタグについて詳しく説明します。