今回も実際に稼働しているサイトをベースに

拡張ポイントの活用についての説明を投稿します。


富士登山・登山用品レンタルなら専門で安心「やまどうぐレンタル屋」


当ブログで頻繁に登場するやまどうぐレンタル屋さんですが、

こちらはサイト名から分かる通りで登山道具のレンタルを行っているショッピングサイトです。


レンタルということなので、

商品をお客様宛に発送してから、

お客様から返却があってはじめて注文が完結します。




先日、やまどうぐレンタル屋さんで、


【スノーシュー】MSR EVO アッセント - 富士登山・登山用品レンタルなら専門で安心「やまどうぐレンタル屋」



注文時に

使用後の返却時に商品のレビューを投稿してくれるのであれば、

注文時に100円引きするという機能を追加しました。

【レビュー登録割引開始!】レビュー登録割引と登録方法 | やまどうぐレンタル屋通信


この機能はチェックがあれば100円引きという機能の他に、

お客様からの返却が確認でき次第送信する返却完了メールにて、

チェックを付けた方だけにレビューの催促の旨を記載する文面を追加しなければなりません。


催促の文面を追加するのを手動で行うと、

返却確認の度に「この商品は割引対象だったかな?」と毎回確認作業が発生する為、

日常業務が複雑化してしまいます。


この業務を自動化するために

いくつかの拡張ポイント(と既存のプラグイン)を組み合わせて対応しました。






返却完了メールというものは、

一般的なネットショップにはありませんが、


メール送信種類追加プラグインというものを利用すると、

様々な種類のメールテンプレートを追加することができます。

※返送伝票番号記録プラグインをインストールすると自動で返却完了メールが追加されますが、今回は説明の為に使用しません。

注文関連のメール文面設定 - SOY Shopを使ってみよう


メール送信種類追加プラグインをインストールし、



メール名を返却完了メール、メールIDをhenkyakuにして追加する。


続いて、

割引があればその旨を返却完了メールに挿入する仕組みを設けてみる。

設ける為にsoyshop.order.mail拡張ポイントを利用する。


話を進める前に拡張ポイントについてわからないということであれば、

下記の記事を先に読んでおくことをおすすめします。

SOY Shopプラグインの拡張ポイントについて


拡張ポイントを使う為には新規でプラグインを開発しなければなりません。

今回はレビュー割引を通知するという意味でnotify_review_discountというプラグインを開発します。


下記はnotify_review_discountのファイル構成になる。

soyshop
└── webapp
    └── src
        └── module
            ├── features
            │   └── notify_review_discount
            │       └── module.ini
            └── plugins
                └── notify_review_discount
                    └── soyshop.order.mail.php

ファイル構成が決まったので、各ファイルを見ていく。

はじめにmodule.iniはプラグインの設定ファイルになるので、

下記のように用意しておく


module.ini

[notify_review_discount]
name="レビュー割引通知メールプラグイン"
type="admin"
description="返却完了メールにレビューを促す文言を挿入する"
version="0.1"
link=""
label=""

続いて、

本題となる拡張ポイントsoyshop.order.mail.phpは下記のようになる。

soyshop.order.mail.php

<?php

class NotifyReviewDiscountOrderMail extends SOYShopOrderMail{

	/**
	 * メール本文を取得
	 * @return string
	 */
	function getMailBody(SOYShop_Order $order){
		
		if(self::isBody()){
			return "レビューをお願いします。";
		}

		return "";

	}

	private function isBody(){
		// レビューの催促の文面を挿入する必要があればtrueにする
		return true;
	}

	function getDisplayOrder(){	//挿入の順番を制御する
		return 100;
	}
}

SOYShopPlugin::extension("soyshop.order.mail.henkyaku", "notify_review_discount", "NotifyReviewDiscountOrderMail");

soyshop.order.mail拡張ポイントのgetMailBodyメソッドで、文字列を返すと任意のメールのヘッダとフッタの間に挿入される仕組みになっています。


今回の拡張ポイントで大事なのが、

コードの最後の行にある

SOYShopPlugin::extension("soyshop.order.mail.henkyaku", "notify_review_discount", "NotifyReviewDiscountOrderMail");

で、


exxtensionの第一引数にsoyshop.order.mail.{メール送信種類追加プラグインで追加したメールID}を指定すると、

指定したメール種別のみに挿入される拡張ポイントとなります。


soyshop.order.mail.{メールID}のメールIDの個所にconfirmを挿入すると、注文確認メールのみ

paymentにすると支払確認メールのみ

deliveryにすると配送確認メールのみ

のようにどの種別のメールに値を挿入したいかを決めることができます。


実は今回のような開発者にとって都合の良い隠しの拡張ポイントというものが沢山あります。

もし自身のサイトで変則的な何かを行いたいという場合は、

とりあえず可能であるかを把握するためにご連絡下さい。

※出来ればフォーラムへの投稿の方がありがたいです。