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というのはどこから出てきたのか?
メールマガジンに登録無料すると、続きをお読みいただけます
-
- Page 1
-
- Page 2
-
- Page 4
-
- Page 5
この記事は参考になりましたか?
- この記事の著者
-
株式会社EC技研 細川哲一(ホソカワ テツイチ)
株式会社EC技研所属。社会人になりたてのころWnnの開発者たちに仕込まれた生粋のオープン系技術者。プロジェクトBLUEなどと言うものにも参加してた頃にはUsogresなんぞという怪しいソフトを開発。好きなことばかりやってたせいで自分で起こした会社を潰してみたりとムチャぶりを発揮しつつ「ECやらんか?」と誘われて現在に至る。...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
株式会社トライアウト 藤江信之(フジエ ノブユキ)
株式会社トライアウト所属。コードは書けるが人とうまく付き合えず仕事がまわらない細川を見かねて手助けに入る。ウェブディレクターという肩書を持っている割にはやっていることは営業中心。Magentoの面白さにとりつかれ現在Magento啓蒙活動中。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
