EC-CUBE プラグインの作り方 実用的なプラグインを作成(上級編)

EC-CUBE プラグインの作り方 実用的なプラグインを作成(上級編)

EC-CUBE プラグインの作り方 実用的なプラグインを作成(上級編) EC-CUBEでちょっと実用的なプラグインを作成(上級編)

さて、今回は「全会員が商品を購入した数」を出力するプラグインを作成したいと思います。
だいたいサムネイルみたいな感じですね。
なお、難易度は高めとなっておりますので、EC-CUBEで初めてのプラグインを作成を先に読むことをおすすめします。

プラグイン設定ファイルの作成

それでは、plugin_info.phpを作成しましょう。

  1. <?php
  2. class plugin_info {
  3. static $PLUGIN_CODE = “CountProductsPlugin”;
  4. static $PLUGIN_NAME = “商品購入カウントプラグイン”;
  5. static $PLUGIN_VERSION = “0.0.1”;
  6. static $COMPLIANT_VERSION = “2.13.1”;
  7. static $AUTHOR = “EC-CUBER”;
  8. static $DESCRIPTION = “商品が購入された回数が表示されます。”;
  9. static $PLUGIN_SITE_URL = “http://www.eccube.org”;
  10. static $AUTHOR_SITE_URL = “http://www.eccube.org”;
  11. static $CLASS_NAME = “CountProductsPlugin”;
  12. static $HOOK_POINTS = array(
  13. );
  14. static $LICENSE = “BSD”;
  15. }

これは初めてのプラグイン作成のファイルを少し変更しただけなので簡単です。次の本体が難易度高くなってます。

プラグイン本体の作成

  1. <?php
  2. class CountProductsPlugin extends SC_Plugin_Base
  3. {
  4. public function __construct(array $arrSelfInfo)
  5. {
  6. parent::__construct($arrSelfInfo);
  7. }
  8. /**
  9. * プラグインをインストールするときに実行される処理。
  10. */
  11. public function install($arrPlugin)
  12. {
  13. }
  14. /**
  15. * プラグインをアンインストールするときに実行される処理。
  16. */
  17. public function uninstall($arrPlugin)
  18. {
  19. }
  20. /**
  21. * プラグインを実行するためのフックポイントを設定する。
  22. * フックポイントとはどこでプラグインを実行される(引っ掛ける)という意味。
  23. * ここでは、Smarty(テンプレート)に対して前処理を実行するように設定する。
  24. * また、prefilterTransformメソッドの処理を実行するように設定する。
  25. */
  26. public function register($objHelperPlugin)
  27. {
  28. $objHelperPlugin
  29. ->addAction(‘prefilterTransform’, array(&$this, ‘prefilterTransform’));
  30. }
  31. /**
  32. * フックポイントで設定した処理を記述する。
  33. */
  34. public function prefilterTransform(&$source, $objPage, $filename)
  35. {
  36. // テンプレートのデータを取得する
  37. $objTransform = new SC_Helper_Transform($source);
  38. switch ($objPage->arrPageLayout[‘device_type_id’])
  39. {
  40. // PCの場合のみプラグインを実行
  41. case DEVICE_TYPE_PC:
  42. // 商品詳細ページにアクセスしたら実行
  43. if (strpos($filename, ‘products/detail.tpl’) !== false)
  44. {
  45. $product_id = (int)$_GET[‘product_id’];
  46. $objQuery =& SC_Query_Ex::getSingletonInstance();
  47. // 購入回数を取得する
  48. $results = $objQuery->
  49. select(‘SUM(quantity) AS c’, ‘dtb_order_detail’,
  50. ‘product_id = ?’, array($product_id))
  51. ;
  52. // 表示するためにキャッシュファイルを削除する。
  53. $fileNames = COMPILE_REALDIR . ‘/*';
  54. foreach (glob($fileNames) as $file)
  55. {
  56. unlink($file);
  57. }
  58. // 1個以上購入されていた場合、全体の購入回数を表示する。
  59. if ($results[0][‘c’])
  60. {
  61. $display = ‘<div style=”color:blue;”>全体で’ . $results[0][‘c’] . ‘個購入されてます。</div>';
  62. $objTransform->select(‘div.point’)
  63. ->insertAfter($display);
  64. }
  65. }
  66. default:
  67. }
  68. // 変更したHTMLをブラウザへ送る
  69. $source = $objTransform->getHTML();
  70. }
  71. }

コメントである程度説明をしていますが、フックポイント内の大まかな流れを記述します。

1.商品詳細ページか判断する。
2.商品のデータ(パラメータ)を取得する。
3.データベースへ問い合わせて購入個数の合計を取得する。
4.表示するため、キャッシュファイルを削除する。
5.表示するため、DOM構造を変更する。

となります。特に4が重要で忘れると表示が反映されないため、注意してください。
反映されない時はSmartyのテンプレートの削除も試してください。

プラグイン完成画面

complete
上記のように表示されます。

このようにプラグインを使用すると、EC-CUBE本体にカスタマイズすることなくカスタマイズすることができます。少し難しいですが、一度作成するとインストールするだけでカスタマイズされるので、ぜひトライしてください。それでは、たくわんでした。

eccubeorg

http://www.eccube.org

You may also like...