Helperを使ってMagentoで出力されるブロックの内容を制御する
この記事は公開から 1年以上が経過しています。現在の最新情報との整合性については弊社では一切の責任を負いかねます。
Magentoでブラウザに出力される画面を定義するためには、通常レイアウトXMLという専用のXMLファイルを使用します。
このレイアウトXMLはある程度タグの構造や書き方が決まっていて、構造を理解することで、かなり自由に画面レイアウトをすることができるようになります。
今回ご紹介するのは、Helperを使ってMagentoが出力するブロックの内容を制御する方法です。
テンプレートを使用するブロックを定義する基本的な方法
Magentoのブロックは、すべてMage_Core_Block_Abstractを継承したクラスで構成されています。
このうち、テンプレートファイルを使うことができるのは、Mage_Core_Block_Templateを継承したクラスです。
このクラスを継承するブロックにおいては、レイアウトXML定義でactionタグを用いてテンプレートファイルを指定することができます。
例えばよく見かける記述として以下のように書くことができます。
path/to/template.phtml
もし、ある特定のページに任意のテンプレートを埋め込みたい場合は、レイアウトXMLなどに上記のような記述を追記することで、対処できます。
Helperを定義してテンプレート出力をカスタマイズする方法
Helperを定義する場合、上記の定義の中の、templateタグを拡張し、以下のように書きます。
path/to/template.phtml
このように書くことで、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を選択した場合の注文確定ボタン:
- お知らせ (34)
- Magento Open Source (169)
- Adobe Commerce (86)
- Magentoトピックス (349)
- Magentoバージョンアップ (11)
- OroCommerce (1)
- AkeneoPIM (16)
- Shopware (26)
- 世界のプライバシー保護規制 (11)
- OroCRM (14)
- Typo3 (9)
- イベント (27)
- Mage-OS (1)
- エクステンションリリース情報 (75)
- Mautic (1)