記事種別

ブロッククラスファイルの作成でプログラムを眺める Magento 1系おさらい

  • このエントリーをはてなブックマークに追加
  • プッシュ通知を受け取る

2015年に新バージョンが出たことなどを理由に、注目が集まるMagentoの開発について、6年の経験を持つ筆者が初歩の初歩から伝授します。第3回は、ブロッククラスファイルを作成しながら、Magento 1のプログラムを眺めてみます。

 前回はPHPのコードをまったく書かずに、「あとxx円で送料無料」とカートページに表示する仕組みを準備する例を紹介した。

 さすがに「xx円」ではプログラムとは言えないので、今回はこの部分を調整しながらMagento 1のプログラミングを見てみることにしよう。

 前回(連載第2回)のコードは eczine-2 のタグを打ってあるので、その段階のものをチェックアウトしてもらえると参照可能だ(本記事執筆時点で、すでにコード自体は先に進んでしまっているので、eczine-2の段階のものを起点として見て欲しい)。

 作成しているプログラム自体は、筆者のgithubに公開しておいたので参照願いたい。

ブロッククラスファイルの探索

 まずは、前回のコードの中で、テンプレート用に準備した

 app/design/frontend/base/default/template/ecgiken/freeshippingby/message.phtml

のファイルを見ていこう。

<div class="ecgiken-freeshippingby-message">
<p>あと<span>xx</span>円で送料無料!!</p>
</div>

 非常にシンプルなHTMLのコードであり、spanタグで囲まれたxxの部分をPHPのコードで置き換え、動的に表示してやればよいことはすぐにわかってもらえるだろう。

 とはいえ、ここがMagento 1での開発でいきなり詰まってしまう部分でもある。たとえば、Magentoのコアファイルのひとつで、カート画面用のテンプレートファイルである

 app/design/frontend/base/default/template/checkout/cart.phtml

を眺めてみてほしい。このファイルの中でPHPのコードで置き換えられている部分の大半が、こんな感じのコードになっていることがわかるだろう。

<?php echo $this->... ?>

 実際にMagento 1.9.2.4のcart.phtmlで調べてみると、echo ... のパターンとなっている28行中、実に23行(82.1%)が、echo $this->... のパターンとなっているのだ。

 つまり、テンプレートファイルをいじろうにも、この $this がいったい何者であるかがわからないと手も足も出ない状態におちいってしまう。

 実はこの $this が何者であるかは、前回作成したファイルのひとつ、

app/design/frontend/base/default/layout/ecgiken/freeshippingby.xml

に書いてある。

 前回はこのファイルについて簡単な説明を行ったが、今回発生している疑問である $this について書かれている部分はすっとばしていた。

 もう一度、内容を確認してみよう。

<?xml version="1.0"?>
<layout version="0.1.0">
    <checkout_cart_index>
        <reference name="head">
            <action method="addItem"><type>skin_css</type><name>css/ecgiken/freeshippingby.css</name></action>
        </reference>
        <reference name="content">
            <block type="core/template" name="ecgiken.freeshippingby.checkout.cart" before="-" template="ecgiken/freeshippingby/message.phtml"/>
        </reference>
    </checkout_cart_index>
</layout>

 この中のtemplate="ecgiken/freeshippingby/message.phtml"としている部分が、先ほど出てきたテンプレートファイルであるmessage.phtmlを示している部分だ。そして、$thisを示しているのが、type="core/template"としている部分になるのだ。

 core/template と記述があるので、ファイルシステム中から core ディレクトリの直下に template というフォルダがないかを探したあなたは、なかなかいい勘をしている。が、残念ながらMagento 1はそこまで素直ではない。

 正解を示す前に、一度 $this が何者かを以下のようにテンプレートファイルを書き換えて調べてみることにしよう。

<div class="ecgiken-freeshippingby-message">
<p>あと<span>xx(を処理するのは<?php echo get_class($this) ?>)</span>円で送料無料!!</p>
</div>

 この修正を行ったうえで、ブラウザでカートページを表示させてみると(/checkout/cart/)以下のように表示されるはずだ。

 これで、$thisは、Mage_Core_Block_Templateというクラスであることがわかった。これとcore/templateという記述を比較すると、なんとなく Block というのが区切りになっていて、後半はTemplateと大文字始まりになっているものを小文字にしたらしいと感じられるかもしれない。

 しかし、ここで、Mage_Coreがcoreになるのだと安易に理解してしまうと、理解が中途半端になってしまうので注意しよう。

 では、このcoreというのはどこから出てきたのか?

※この続きは、会員の方のみお読みいただけます(登録無料)。



  • このエントリーをはてなブックマークに追加
  • プッシュ通知を受け取る

バックナンバー

連載:Magento開発・初歩の初歩

2015年04月の人気記事ランキング

All contents copyright © 2013-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5