Magentoでブラウザに出力される画面を定義するためには、通常レイアウトXMLという専用のXMLファイルを使用します。
このレイアウトXMLはある程度タグの構造や書き方が決まっていて、構造を理解することで、かなり自由に画面レイアウトをすることができるようになります。

今回ご紹介するのは、Helperを使ってMagentoが出力するブロックの内容を制御する方法です。

テンプレートを使用するブロックを定義する基本的な方法

Magentoのブロックは、すべてMage_Core_Block_Abstractを継承したクラスで構成されています。
このうち、テンプレートファイルを使うことができるのは、Mage_Core_Block_Templateを継承したクラスです。
このクラスを継承するブロックにおいては、レイアウトXML定義でactionタグを用いてテンプレートファイルを指定することができます。

例えばよく見かける記述として以下のように書くことができます。


    

もし、ある特定のページに任意のテンプレートを埋め込みたい場合は、レイアウトXMLなどに上記のような記述を追記することで、対処できます。

Helperを定義してテンプレート出力をカスタマイズする方法

Helperを定義する場合、上記の定義の中の、templateタグを拡張し、以下のように書きます。


    
        
    

このように書くことで、Magentoはmyextエクステンションの中にある、Helper/Data.phpに定義されている、 someFunctionを画面構築時に自動的に呼び出します。

Helperが呼び出すメソッドの定義

では、someFuctionをどう書けばよいのでしょうか?
基本形としては以下のように書きます。

public function someFunction($name, $block)
{
   //何かを基準にした判定処理

   //本来のブロックが持っているテンプレートファイルを返す処理
   if ($blockObject = Mage::getSingleton('core/layout')->getBlock($block)) {
        return $blockObject->getTemplate();
    }
}

こうすることで、ある特定の条件式に応じたテンプレートの切り替えができるようになります。
もちろん、1つのブロック定義だけで2種類・3種類のバリエーションが持てるようになるわけで、ルールに沿ったテンプレートやURL定義などを行うことで、柔軟性をもった運用ができることでしょう。

Helperを使う実例

手前味噌になりますが、弊社製のSpike連携エクステンションでは、購入手続きの最終ステップで、以下のようにボタン表示を切り替えています。

通常の注文確定ボタン:
通常の注文確定ボタンSpikeを選択した場合の注文確定ボタン:
Spikeの場合の注文確定ボタン