2015年8月9日日曜日

EC-CUBEにアンケート機能を追加する方法(その4)プラグインを拡張

SYSTEM_KDです。

前回、プラグイン機能を利用し、アンケート機能を実装しましたが最低限の機能しか有してないので、拡張していきたいと思います。

拡張を行う部分は、下記を想定しています。

1.設定画面を追加し、アンケートを埋め込むためのURLを簡単に設定できるようにする。

2.会員のみアンケートを表示する機能を追加

 

設定画面を追加する

では早速、プラグインに設定画面を追加していきたいと思います。

ちなみに設定画面とは、EC-CUBEのプラグインへ一覧でいうところの「プラグイン設定」。下記画像の赤枠部分を押した際に表示される画面を指します。

plugin_config

 

追加するには、次のファイルが必要となります。

config.php

設定画面のクラスファイル
 (今回は、PC_Page_Plugin_GFCooperation_Config.phpとします)

設定画面のテンプレートファイル
 (今回は、config.tplとします)

 

config.phpを作成

まず、「config.php」を用意します。

作成場所は、「data/downloads/plugin/GFCooperation/」直下になります。

<?php
// {{{ requires
require_once PLUGIN_UPLOAD_REALDIR . 'GFCooperation/LC_Page_Plugin_GFCooperation_Config.php';

// }}}
// {{{ generate page
$objPage = new LC_Page_Plugin_GFCooperation_Config();
$objPage->init();
$objPage->process();
?>

config.phpはこれだけです。
設定画面のクラスファイルを指定してあげるだけになります。


設定画面のクラスファイルを用意


次に設定画面のクラスファイルを用意したいと思います。

作成場所は、「data/downloads/plugin/GFCooperation/」直下になります。

<?php

// {{{ requires
require_once CLASS_EX_REALDIR . 'page_extends/admin/LC_Page_Admin_Ex.php';

/**
* 設定画面のクラス
*
* @package LC_Page_Plugin_GFCooperation_Config
* @version $Id: $
*/
class LC_Page_Plugin_GFCooperation_Config extends LC_Page_Admin_Ex {

var $arrForm = array();

/**
* 初期化する.
*
* @return void
*/
function init() {
parent::init();
$this->tpl_mainpage = PLUGIN_UPLOAD_REALDIR ."GFCooperation/templates/config.tpl";
$this->tpl_subtitle = "プラグインの設定";
}

/**
* プロセス.
*
* @return void
*/
function process() {
$this->action();
$this->sendResponse();
}

/**
* Page のアクション.
*
* @return void
*/
function action() {
$this->setTemplate($this->tpl_mainpage);
}

/**
* デストラクタ.
*
* @return void
*/
function destroy() {
parent::destroy();
}
}
?>

上記は、ひとまずテンプレートを指定して、表示する部分までになります。


テンプレートファイルを作成


最後に設定画面用のテンプレートファイルを用意します。

作成場所は、「data/downloads/plugin/GFCooperation/templates」直下になります。

設定項目としては、アンケートを埋め込むためのURLになりますので、URLが設定できるような画面を用意してやります。

<!--{include file="`$smarty.const.TEMPLATE_ADMIN_REALDIR`admin_popup_header.tpl"}-->
<script type="text/javascript">
</script>

<h2><!--{$tpl_subtitle}--></h2>
<form name="form1" id="form1" method="post" action="<!--{$smarty.server.REQUEST_URI|h}-->">
<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
<input type="hidden" name="mode" value="edit">

<table border="0" cellspacing="1" cellpadding="8" summary=" ">
<tr>
<td colspan="2" width="90" bgcolor="#f3f3f3">▼Googleフォームの埋め込みURLを設定します</td>
</tr>
<tr >
<td bgcolor="#f3f3f3">URL</td>
<td>
<span class="red"><!--{$arrErr[$key]}--></span>
<input type="text" class="box60" size="60" style="" maxlength="1000" value="<!--{$arrForm.gfurl|h}-->" name="gfurl">
<br><span class="attention"> (上限1000文字)</span>
</td>
</tr>
</table>

<div class="btn-area">
<ul>
<li>
<a class="btn-action" href="javascript:;" onclick="document.form1.submit();return false;"><span class="btn-next">この内容で登録する</span></a>
</li>
</ul>
</div>

</form>

管理画面側ですので、とりあえず必要最低限のものを用意しました。

ここまでできたら、管理画面のプラグイン一覧より、このプラグインの「プラグイン設定」ボタンを押してみましょう。

上手くできていれば、この画面が表示されるかと思います。

plugin_config_view

 


機能部分の実装


では、実装へ移ります。

設定ファイルの実装の要点は以下になります。



  1. 設定画面表示時に設定内容を取得
    設定画面を開いた時に、登録情報を表示してやるための処理になります。

  2. 登録機能の実装
    画面に入力された埋め込みURLを保持してやる処理になります。
    データの保存先は、プラグイン情報の格納用として用意されているフリーフィールドの「free_field1」に保持するようにしたいと思います。

上記の通り、普通にデータを取得と登録(更新)だけになりますので、ソースコードは割愛します。

 

次に、プラグイン本体の実装ですが、こちらは次の様な流れとなります。



  1. テンプレートのトランスフォーム実装
    テンプレートへアンケート表示を埋め込むためのカスタマイズを行います。

  2. 埋め込みURLの取得と、設定
    設定画面で登録された埋め込みURLを取得し、テンプレートへ表示が行える処理を作成します。

 

では、さっそく、テンプレートのトランスフォームを実装していきたいと思います。

function prefilterTransform(&$source, LC_Page_Ex $objPage, $filename) {
$objTransform = new SC_Helper_Transform($source);
$template_dir = PLUGIN_UPLOAD_REALDIR . 'GFCooperation/templates/';
switch($objPage->arrPageLayout['device_type_id']){
case DEVICE_TYPE_MOBILE:
break;
case DEVICE_TYPE_SMARTPHONE:
break;
case DEVICE_TYPE_PC:

if (strpos($filename, 'shopping/complete.tpl') !== false) {
$objTransform->select('div.shop_information')->insertBefore(
'<!--{if $gfurl}--><p class="message" style="margin-top: 15px;">宜しければ、アンケートにご協力ください</p><!--{$gfurl}--><!--{/if}-->'
);
}

break;
case DEVICE_TYPE_ADMIN:
default:
break;
}
$source = $objTransform->getHTML();
}

プラグイン本体の、テンプレートフック部分を上記の様にすることによって、アンケート用の埋め込みURLを設定できるようにします。

 

次に、埋め込み用URLを取得する処理を追加するために、フックポイントを増やしてやります。

今回は購入完了画面のフックとなりますので、「LC_Page_Shopping_Complete」の処理後をフックしてやるように、以下のコードを追加します。

function register(SC_Helper_Plugin $objHelperPlugin) {

// テンプレートトランスフォーム
$objHelperPlugin->addAction('prefilterTransform', array(&$this, 'prefilterTransform'));

// 購入完了画面 後処理
$objHelperPlugin->addAction("LC_Page_Shopping_Complete_action_after", array(&$this, 'shipping_complete_action_after'));
}

 

フックポイントを増やしましたので、次は実際にフック時の処理を追加してやります。

/**
* 購入完了画面 後処理
* @param unknown $objPage
*/
function shipping_complete_action_after($objPage) {

// プラグイン情報を取得.
$plugin = SC_Plugin_Util_Ex::getPluginByPluginCode("GFCooperation");
$objPage->gfurl = $plugin['free_field1'];

}

処理の中身としては、登録した埋め込みURLを取得して、表示用に設定してやるだけなので、シンプルです。

これで、プラグイン設定画面に、埋め込みURLを指定してやれば、アンケートが表示され、埋め込みURLを削除すれば、通常の購入完了画面が表示される処理ができました。

 


会員のみにアンケートを表示する


今回の目標に会員のみにアンケートを表示する機能を追加するということを上げましたので、最後にその部分の実装を行いたいと思います。

とはいえ、その処理には大したコードの追加は必要なく、条件式を追加してやるだけです。

/**
* 購入完了画面 後処理
* @param unknown $objPage
*/
function shipping_complete_action_after($objPage) {

// プラグイン情報を取得.
$plugin = SC_Plugin_Util_Ex::getPluginByPluginCode("GFCooperation");
$objPage->gfurl = $plugin['free_field1'];

$objCustomer = new SC_Customer_Ex();

if(!$objCustomer->isLoginSuccess()) {
$objPage->gfurl = "";
}

}

 


まとめ


以上、4回にわたってEC-CUBEにアンケート機能を追加する方法について、まとめてみました。

上記のプラグインをもとに、さらに「表示期間」を追加してやったり、「複数アンケートを登録」できるようにしたり、「ユーザによってアンケートを分ける」といった機能追加をしてやると、よりちゃっと使えるアンケートプラグインになるのではないかと思います。

気が向いたら、作ってオーナーズストアで公開するかもしれないですw
(1000円位だったら買ってくれる人とかいるかなー)

 

以上、色々わかりにくい説明で申し訳ないです、EC-CUBEにアンケート機能を追加する方法でした。

[参考]
EC-CUBEにアンケート機能を追加する方法(その1)
EC-CUBEにアンケート機能を追加する方法(その2)
EC-CUBEにアンケート機能を追加する方法(その3)プラグインで実装

0 件のコメント:

コメントを投稿