SYSTEM_KDです。
前回、プラグイン機能を利用し、アンケート機能を実装しましたが最低限の機能しか有してないので、拡張していきたいと思います。
拡張を行う部分は、下記を想定しています。
1.設定画面を追加し、アンケートを埋め込むためのURLを簡単に設定できるようにする。
2.会員のみアンケートを表示する機能を追加
設定画面を追加する
では早速、プラグインに設定画面を追加していきたいと思います。
ちなみに設定画面とは、EC-CUBEのプラグインへ一覧でいうところの「プラグイン設定」。下記画像の赤枠部分を押した際に表示される画面を指します。
追加するには、次のファイルが必要となります。
・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>
管理画面側ですので、とりあえず必要最低限のものを用意しました。
ここまでできたら、管理画面のプラグイン一覧より、このプラグインの「プラグイン設定」ボタンを押してみましょう。
上手くできていれば、この画面が表示されるかと思います。
機能部分の実装
では、実装へ移ります。
設定ファイルの実装の要点は以下になります。
- 設定画面表示時に設定内容を取得
設定画面を開いた時に、登録情報を表示してやるための処理になります。 - 登録機能の実装
画面に入力された埋め込みURLを保持してやる処理になります。
データの保存先は、プラグイン情報の格納用として用意されているフリーフィールドの「free_field1」に保持するようにしたいと思います。
上記の通り、普通にデータを取得と登録(更新)だけになりますので、ソースコードは割愛します。
次に、プラグイン本体の実装ですが、こちらは次の様な流れとなります。
- テンプレートのトランスフォーム実装
テンプレートへアンケート表示を埋め込むためのカスタマイズを行います。 - 埋め込み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 件のコメント:
コメントを投稿