注文メールの明細行をカスタマイズするには
この記事は公開から 1年以上が経過しています。現在の最新情報との整合性については弊社では一切の責任を負いかねます。
Magentoの注文確認メールは、標準ではHTML形式で送信されます。
ビジネス用途のメールでは、テキストメールが今でも主流ですが、Amazonなどは注文確認メールをHTML形式で送ってくることもあり、以前に比べるとHTMLメールに対する抵抗はなくなってきたのではないかと思います。
さて、今回のエントリではMagentoの注文確認メール(請求書や配送メールも含みます)をカスタマイズして、商品画像を掲載する方法をご紹介します。
Magentoのメールテンプレートの構成
2箇所に分かれているメールテンプレート
Magentoのメールテンプレートは2箇所にわかれています。
- app/locale/<言語>/template/email/以下
- app/design/<パッケージ>/<テーマ名>/template/email/以下
- app/design/<パッケージ>/<テーマ名>/template/bundle/email
- app/design/<パッケージ>/<テーマ名>/template/downloadable/email
localeの下にあるものは、管理画面の「取り引きメール管理」で編集することができます。
ですから管理者の方の希望に合わせて調整が可能です。
designの下にあるものはテンプレートの一部として扱われているため、管理画面から編集することができません。
都度ファイルを開いて編集する必要があります。
商品情報を出しているテンプレート
design配下にあるテンプレートは、以下のような構成になっています。
app/design/frontend/base/default/template/email/
├── order
│ ├── creditmemo
│ │ └── items.phtml
│ ├── invoice
│ │ └── items.phtml
│ ├── items
│ │ ├── creditmemo
│ │ │ └── default.phtml
│ │ ├── invoice
│ │ │ └── default.phtml
│ │ ├── order
│ │ │ └── default.phtml
│ │ └── shipment
│ │ └── default.phtml
│ ├── items.phtml
│ └── shipment
│ ├── items.phtml
│ └── track.phtml
└── productalert
├── price.phtml
└── stock.phtml
このなかで、商品情報を表示するために使っているテンプレートは、
app/design/frontend/base/default/template/email/order/items/
├── creditmemo
│ └── default.phtml
├── invoice
│ └── default.phtml
├── order
│ └── default.phtml
└── shipment
└── default.phtml
と、実は4つのテンプレートだけなのです。これはbundle以下とdownloadable以下もほぼ同じです。
これらのテンプレートに手を入れて、商品画像を表示できるようにしてみましょう。
商品情報を出しているテンプレートのカスタマイズ
では、商品画像をメール文面上に掲載するためのカスタマイズをしてみます。
一番使用するorder用のテンプレートを開くと、比較的先頭部分に以下のような記述があります。
<?php $_item = $this->getItem() ?>
<?php $_order = $this->getItem()->getOrder() ?>
<tr>
<td align="left" valign="top" style="font-size:11px; padding:3px 9px; border-bottom:1px dotted #CCCCCC;">
<strong style="font-size:11px;"><?php echo $this->escapeHtml($_item->getName()) ?></strong>
商品名を出している箇所がstrongタグで書かれているので、その前辺りに埋め込むことにします。
$_itemを使って商品データを取得する
$_itemは一見商品オブジェクトのように見えますが、実は商品オブジェクトではありません。注文商品のオブジェクトなので、画像データを持っていません。
多少処理コストは掛かりますが、このオブジェクトから商品オブジェクトを取得し、そこから画像ファイル名を取得します。
それには次のように書きます。
<?php
$product = Mage::getModel('catalog/product')
->setStoreId($_item->getOrder()->getStoreId())
->load($_item->getProductId());
?>
こうすることで、$productに購入した商品のオブジェクトが読み込まれます。
あとはこのオブジェクトを使って、商品画像を取得すればOKです。
商品画像を表示する
商品画像を表示するには、商品一覧などのテンプレートを参考にするとよいでしょう。
記述例を以下に示します。
<img src="<?php echo Mage::helper('catalog/image')->init($product, 'image')->resize(50); ?>" width="50" height="50" alt="" />
Mage_CatalogモジュールのHelperにある、Imageヘルパーを呼び出して、商品画像のリサイズを行います。
あとは画像と商品名がうまく出るようにHTMLとスタイル定義を追加しておきます。
送信テスト
最後に送信テストを行います。
Magento1.8.1では1件の注文に対し、2回以上注文メールを送信できないため、テストがやや面倒です。
きちんと修正ができていれば、以下のようにメールが変わると思います。
まとめ
まとめると、
- Magentoの注文メールは基本HTML形式
- 商品画像をメールに記載するには、テンプレートのカスタマイズが必要
- app/design/frontend/base/default/template/email/order/items/などにあるファイルを編集すれば対応可能
- $_itemから商品データを取得し、画像を表示する必要あり
というようになります。
そんなに難しい修正でもないので、HTMLでメールを送信されている方はトライしてみてはいかがでしょうか?