SOY Shopの質問で

サイトにログインしているお客様に向けて、

現在の取得ポイントと使用期限を表示したい

というものがありました。


soyshop_point_limit


soyshop_point_limit2


こんな感じの表示ができれば良いってことですよね?


この機能を実現するためには、

モジュールを作る必要があるので、

今回はモジュールの書き方を紹介します。




soyshop_point_limit3


はじめに

サイト管理 > テンプレート管理を開き、

下の方にあるモジュール一覧でモジュールを追加します。


今回はparts.point_limitというIDを作成しました。


作成したら、

モジュールの編集画面で生成された


<!-- shop:module="parts.point_limit" -->
ポイント使用期限のモジュールを読み込みます。
<!-- /shop:module="parts.point_limit" -->

このタグをテンプレートの表示したい箇所に挿入します。


それではこれからモジュールにスクリプトを追加していきましょう。




モジュールの編集画面を開き、下記のコードを記述します。


//マイページIDを登録していない場合は登録する
if(!defined("SOYSHOP_CURRENT_MYPAGE_ID")){
define("SOYSHOP_CURRENT_MYPAGE_ID", soyshop_get_mypage_id());
}

//表示する文字列を格納しておく配列
$text = array();

//ログインチェック $isLoggedInにログインの有無が格納されています
$mypage = MyPageLogic::getMyPage();
$isLoggedIn = $mypage->getIsLoggedin();

//ログインしている場合。ポイントプラグインがアクティブであるかも念のために調べておく
if($isLoggedIn && SOYShopPluginUtil::checkIsActive("common_point_base")){

//ログインしているユーザの情報を取得します。
$user = $mypage->getUser();

$text[] = "ようこそ" . $user->getName() . "様!";

//ログインしているユーザの取得ポイントを取得します
$point = $user->getPoint();

//ポイントを所有している場合
if($point > 0){

$text[] = "取得ポイントは" . $point . "ptです。";

//ポイントの使用期限をタイムスタンプで取得する。無期限の場合はnullを返す
$timeLimit = SOY2Logic::createInstance("module.plugins.common_point_base.logic.PointBaseLogic")->getPointByUserId($user->getId())->getTimeLimit();

//使用期限が決まっている場合
if(isset($timeLimit)){

//使用期限内の場合
if($timeLimit > time()){

//ポイント切れまであと何日か調べる
$days = (int)floor(($timeLimit - time()) / (24 * 60 * 60));
$text[] = "後" . $days . "日でポイントは無効になります。";

//使用期限が過ぎていた場合はその旨を表示する
} else {
$text[] = "お客様のポイントは使用期限を過ぎ、使用することができません。";
}

//無期限の場合
} else {
//
}

//ポイントを所有していない場合
} else {

}

//ログインしていない場合
} else {
//
}

echo "<p>" . implode(" ", $text) . "</p>";

これでログイン後にポイントの使用期限が表示される様になりました。




サイトを開き、ポイントを所有しているアカウントでログインしてみてください。


soyshop_point_limit2


このように表示されていたら終了です。


今回は最低限のコードしか書いていません。

ポイントの期限が無かった場合やそもそもログインしていない場合の表示がありません。


コードにコメントを入れましたので、

そのコメントをヒントに機能を仕上げてみましょう。


最後に

作成したい機能がありましたらお問い合わせください。

※モジュールでは実現できない機能もありますのでご了承ください。


お問い合わせはこちらから