EC-CUBEプラグイン機能について




                     1
自己紹介

                      吉本 啓顕(よしもと ひろあき)

                                              勤務先
                                           株式会社ロックオン
                                          EC-CUBE プロジェクト担当


                                                   主な仕事
                                              プロジェクト管理
                                                  開発
                                               運用・サポート

Copyright c LOCKON CO.,LTD. All Rights Reserved.             2
運営会社紹介
     株式会社ロックオン

    • 2001年6月4日 設立

    • 従業員:54名

        (平均:約30歳)

    • 本社:大阪(梅田)

    • 支社:東京(銀座)、シリコンバレー

                        ベトナム(オフショア拠点)

    • 経営理念:Impact On The World

Copyright c LOCKON CO.,LTD. All Rights Reserved.       3
ロックオン 製品紹介




                                  つくる              運用する


                                分析する               はかる




Copyright c LOCKON CO.,LTD. All Rights Reserved.          4
今日のテーマ




Copyright c LOCKON CO.,LTD. All Rights Reserved.        5
Agenda




Copyright c LOCKON CO.,LTD. All Rights Reserved.            6
Agenda




Copyright c LOCKON CO.,LTD. All Rights Reserved.            7
EC-CUBEとは?




Copyright c LOCKON CO.,LTD. All Rights Reserved.          8
EC-CUBEとは?



                                             EC構築オープンソース
                                                     として
                                               国内No.1シェア



Copyright c LOCKON CO.,LTD. All Rights Reserved.           9
EC-CUBEとは?




  1万7000店舗以上
Copyright c LOCKON CO.,LTD. All Rights Reserved.          10
EC-CUBEとは?




Copyright c LOCKON CO.,LTD. All Rights Reserved.          11
EC-CUBEとは?




                                                   demonstration




Copyright c LOCKON CO.,LTD. All Rights Reserved.                   12
Agenda




Copyright c LOCKON CO.,LTD. All Rights Reserved.            13
ソフトウェア要件




             IIS


Copyright c LOCKON CO.,LTD. All Rights Reserved.      14
EC-CUBEの構造



                                                      request           response



                                                      Pageクラス
                                                         controller

                                                                             Smarty



                                   SCクラス                              Viewクラス
                                              model                        view


Copyright c LOCKON CO.,LTD. All Rights Reserved.                                      15
EC-CUBEの構造



                                                      request           response



                                                      Pageクラス
                                                         controller

                                                                             Smarty



                                   SCクラス                              Viewクラス
                                              model                        view


Copyright c LOCKON CO.,LTD. All Rights Reserved.                                      16
EC-CUBEの構造



                                                      request           response



                                                      Pageクラス
                                                         controller

                                                                             Smarty



                                   SCクラス                              Viewクラス
                                              model                        view


Copyright c LOCKON CO.,LTD. All Rights Reserved.                                      17
EC-CUBEの構造



                                                      request           response



                                                      Pageクラス
                                                         controller

                                                                             Smarty



                                   SCクラス                              Viewクラス
                                              model                        view


Copyright c LOCKON CO.,LTD. All Rights Reserved.                                      18
EC-CUBEの構造



                                                      request           response



                                                      Pageクラス
                                                         controller

                                                                             Smarty



                                   SCクラス                              Viewクラス
                                              model                        view


Copyright c LOCKON CO.,LTD. All Rights Reserved.                                      19
EC-CUBEの構造



                                                      request           response



                                                      Pageクラス
                                                         controller

                                                                             Smarty



                                   SCクラス                              Viewクラス
                                              model                        view


Copyright c LOCKON CO.,LTD. All Rights Reserved.                                      20
Agenda




Copyright c LOCKON CO.,LTD. All Rights Reserved.            21
プラグインで出来る事


          ・EC-CUBEの本体処理に介入する。

          ・テンプレートに変更を加える。




Copyright c LOCKON CO.,LTD. All Rights Reserved.   22
プラグインで出来る事


          ・EC-CUBEの本体処理に介入する。

          ・テンプレートに変更を加える。




Copyright c LOCKON CO.,LTD. All Rights Reserved.   23
プラグインで出来る事


      ・フォームからのPOST値を変更する。
      ・別のページに遷移させる。
      ・全く別の処理を実行する。




Copyright c LOCKON CO.,LTD. All Rights Reserved.   24
プラグインで出来る事




              なんでも出来る。


Copyright c LOCKON CO.,LTD. All Rights Reserved.   25
プラグインで出来る事


          ・EC-CUBEの本体処理に介入する。

          ・テンプレートに変更を加える。




Copyright c LOCKON CO.,LTD. All Rights Reserved.   26
プラグインで出来る事



                     ・ボタンを追加する。
                     ・フォームを追加する。
                     ・テーブルを消す。




Copyright c LOCKON CO.,LTD. All Rights Reserved.   27
プラグインで出来る事



                                                      request           response



                                                      Pageクラス
                                                         controller

                                                                             Smarty



                                   SCクラス                              Viewクラス
                                              model                        view


Copyright c LOCKON CO.,LTD. All Rights Reserved.                                      28
Agenda




Copyright c LOCKON CO.,LTD. All Rights Reserved.            29
プラグインの作り方




               何を作るのか?


Copyright c LOCKON CO.,LTD. All Rights Reserved.   30
プラグインの作り方




  カテゴリ・コンテンツ。


Copyright c LOCKON CO.,LTD. All Rights Reserved.   31
プラグインの作り方

     ①商品カテゴリー毎にデータを持たせる。


     ②該当のカテゴリが選択・表示される際に
     データを持ってきて画面に表示する。




Copyright c LOCKON CO.,LTD. All Rights Reserved.   32
プラグインの作り方

       CategoryContents.tar.gz                                              用意するファイル
                                       CategoryContents.php (プラグインメインクラス) [必須]
                                       plugin_info.php (プラグイン情報) [必須]
                                       plugin_update.php (アップデートクラス)


                                       logo.png (縦65x横65ピクセル)

                                                   categorycontents_admin_basis_category_add.tpl

                                                   categorycontents_products_list_add.tpl




Copyright c LOCKON CO.,LTD. All Rights Reserved.                                                   33
プラグインの作り方

     ①商品カテゴリー毎にデータを持たせる。


     ②該当のカテゴリが選択・表示される際に
     データを持ってきて画面に表示する。




Copyright c LOCKON CO.,LTD. All Rights Reserved.   34
プラグインの作り方



                                                        SC_Helper_Plugin


                                                              CategoryContents     plugin




                             LC_Page_Products_List

                                     controller
                         LC_Page_Products_List_action_after
                                                                       Viewクラス
                                                                            view



Copyright c LOCKON CO.,LTD. All Rights Reserved.                                            35
プラグインの作り方

       CategoryContents.tar.gz                                              用意するファイル
                                       CategoryContents.php (プラグインメインクラス) [必須]
                                       plugin_info.php (プラグイン情報) [必須]
                                       plugin_update.php (アップデートクラス)
                                       config.php (設定クラス)
                                       logo.png (縦65x横65ピクセル)

                                                   categorycontents_admin_basis_category_add.tpl

                                                   categorycontents_products_list_add.tpl




Copyright c LOCKON CO.,LTD. All Rights Reserved.                                                   36
プラグインメインクラス



               CategoryContents.php
               (プラグインメインクラス)




Copyright c LOCKON CO.,LTD. All Rights Reserved.   37
プラグインメインクラス



               CategoryContents.php
               (プラグインメインクラス)




Copyright c LOCKON CO.,LTD. All Rights Reserved.   38
プラグインメインクラス



               CategoryContents.php
               (プラグインメインクラス)




Copyright c LOCKON CO.,LTD. All Rights Reserved.   39
プラグインメインクラス



               CategoryContents.php
               (プラグインメインクラス)




Copyright c LOCKON CO.,LTD. All Rights Reserved.   40
プラグインメインクラス


         フックポイント通過時
               CategoryContents.php
                      に実行する
               (プラグインメインクラス)
                    コールバック関数


Copyright c LOCKON CO.,LTD. All Rights Reserved.   41
プラグインメインクラス

                          CategoryContents.php(プラグインメインクラス)


function disp_contents($objPage) {
      // 選択されたカテゴリーID
      $category_id = $objPage->arrSearchData['category_id'];
      if(!empty($category_id)){
          $array_category = CategoryContents::getCategoryByCategoryId($category_id);
          $objPage->plg_categoryContents_category_contents
            = $array_category['plg_categorycontents_category_contents'];
      }
  }




Copyright c LOCKON CO.,LTD. All Rights Reserved.                                       42
プラグインメインクラス

                          CategoryContents.php(プラグインメインクラス)


function disp_contents($objPage) {
      // 選択されたカテゴリーID
      $category_id = $objPage->arrSearchData['category_id'];
      if(!empty($category_id)){         カテゴリーのIDをキーに
                        登録されたコンテンツを取得する
          $array_category = CategoryContents::getCategoryByCategoryId($category_id);
          $objPage->plg_categoryContents_category_contents
            = $array_category['plg_categorycontents_category_contents'];
      }
  }




Copyright c LOCKON CO.,LTD. All Rights Reserved.                                 43
用意するファイル
       CategoryContents.tar.gz


                                       CategoryContents.php (プラグインメインクラス) [必須]
                                       plugin_info.php (プラグイン情報) [必須]
                                       plugin_update.php (アップデートクラス)
                                       config.php (設定クラス)
                                       logo.png (縦65x横65ピクセル)

                                                   categorycontents_admin_basis_category_add.tpl

                                                   categorycontents_products_list_add.tpl




Copyright c LOCKON CO.,LTD. All Rights Reserved.                                                   44
プラグイン情報



                               plugin_info.php
                               (プラグイン情報)




Copyright c LOCKON CO.,LTD. All Rights Reserved.       45
プラグイン情報クラス
                                   プラグインメインクラス


                               plugin_info.php
                               (プラグイン情報)




Copyright c LOCKON CO.,LTD. All Rights Reserved.   46
プラグイン情報クラス



                               plugin_info.php
                               (プラグイン情報)




Copyright c LOCKON CO.,LTD. All Rights Reserved.   47
プラグイン情報クラス


                            フックポイント
                と
          plugin_info.php
        コールバック関数を定義
          (プラグイン情報)




Copyright c LOCKON CO.,LTD. All Rights Reserved.   48
プラグインメインクラス

                          plugin_info.php(プラグイン情報)
class plugin_info {
   static $PLUGIN_CODE      = "CategoryContents ";
   static $PLUGIN_NAME      = "カテゴリ・コンテンツ";
   static $PLUGIN_VERSION   = "0.1";
   static $COMPLIANT_VERSION = "2.12.0";
   static $AUTHOR            = “株式会社ロックオン";
   static $DESCRIPTION       = “カテゴリにコンテンツを表示。";
   static $PLUGIN_SITE_URL   = "http://www.ec-cube.net/";
      介入したいフックポイントとコールバック関数定義
   static $AUTHOR_SITE_URL   = "http:// www.ec-cube.net /";
   static $CLASS_NAME        = "SampleClassHook";


static $HOOK_POINTS        = array(
array(" LC_Page_Admin_Products_Category_action_after ", 'contents_set'),
array(" LC_Page_Products_List_action_after ", 'disp_contents'),
array("prefilterTransform", 'prefilterTransform'));
}




Copyright c LOCKON CO.,LTD. All Rights Reserved.                           49
プラグインメインクラス

                          plugin_info.php(プラグイン情報)
class plugin_info {
   static $PLUGIN_CODE      = "CategoryContents ";
   static $PLUGIN_NAME      = "カテゴリ・コンテンツ";
   static $PLUGIN_VERSION   = "0.1";
   static $COMPLIANT_VERSION = "2.12.0";
   static $AUTHOR            = “株式会社ロックオン";
   static $DESCRIPTION       = “カテゴリにコンテンツを表示。";
   static $PLUGIN_SITE_URL   = "http://www.ec-cube.net/";
   static $AUTHOR_SITE_URL   = "http:// www.ec-cube.net /";
   static $CLASS_NAME        = "SampleClassHook";


static $HOOK_POINTS    = array(
array(" LC_Page_Admin_Products_Category_action_after ", 'contents_set'),
array(" LC_Page_Products_List_action_after ", 'disp_contents'),
array("prefilterTransform", 'prefilterTransform'));
}




Copyright c LOCKON CO.,LTD. All Rights Reserved.                           50
プラグインメインクラス

                          plugin_info.php(プラグイン情報)
class plugin_info {
   static $PLUGIN_CODE      = "CategoryContents ";
   static $PLUGIN_NAME      = "カテゴリ・コンテンツ";
   static $PLUGIN_VERSION   = "0.1";
   static $COMPLIANT_VERSION = "2.12.0";
   static $AUTHOR            = “株式会社ロックオン";
   static $DESCRIPTION       = “カテゴリにコンテンツを表示。";
   static $PLUGIN_SITE_URL   = "http://www.ec-cube.net/";
   static $AUTHOR_SITE_URL   = "http:// www.ec-cube.net /";
   static $CLASS_NAME        = "SampleClassHook";


               介入したい場所
static $HOOK_POINTS    = array(
array(" LC_Page_Admin_Products_Category_action_after ", 'contents_set'),
array(" LC_Page_Products_List_action_after ", 'disp_contents'),
array("prefilterTransform", 'prefilterTransform'));
}




Copyright c LOCKON CO.,LTD. All Rights Reserved.                           51
プラグインメインクラス

                          plugin_info.php(プラグイン情報)
class plugin_info {
   static $PLUGIN_CODE      = "CategoryContents ";
   static $PLUGIN_NAME      = "カテゴリ・コンテンツ";
   static $PLUGIN_VERSION   = "0.1";
   static $COMPLIANT_VERSION = "2.12.0";
   static $AUTHOR            = “株式会社ロックオン";
   static $DESCRIPTION       = “カテゴリにコンテンツを表示。";
   static $PLUGIN_SITE_URL   = "http://www.ec-cube.net/";
   static $AUTHOR_SITE_URL   = "http:// www.ec-cube.net /";
   static $CLASS_NAME        = "SampleClassHook";


static $HOOK_POINTS    = array(                実行する関数
array(" LC_Page_Admin_Products_Category_action_after ", 'contents_set'),
array(" LC_Page_Products_List_action_after ", 'disp_contents'),
array("prefilterTransform", 'prefilterTransform'));
}




Copyright c LOCKON CO.,LTD. All Rights Reserved.                           52
プラグインメインクラス

                              実行したい関数を
                             メインクラスに作成

   作成した関数とフックポイントを
      設定ファイルに定義



Copyright c LOCKON CO.,LTD. All Rights Reserved.   53
テンプレート変更の仕組み
                                                        SC_Helper_Plugin
                                                                     plugin


                            テンプレート                          テンプレート
                             ファイル                            ファイル




         テンプレート                                     pre                       コンパイル
          ファイル                                                       解析
                                                   filter                      ファイル




                           一度コンパイルファイルが生成されると
                           次回からはコンパイルファイルが参照される


Copyright c LOCKON CO.,LTD. All Rights Reserved.                                      54
テンプレート変更の仕組み
   <!--★タイトル★-->
      <h2 class="title"><!--{$tpl_subtitle|h}--></h2>

     <!--▼検索条件-->
     <!--{if $tpl_subtitle == "検索結果"}-->
        <ul class="pagecond_area">
           <li><strong>商品カテゴリ:</strong><!--{$arrSearch.category|h}--></li>
           <li><strong>商品名:</strong><!--{$arrSearch.name|h}--></li>
        </ul>
     <!--{/if}-->
     <!--▲検索条件-->
                                                               SC_Helper_Plugin
                                                                                                 plugin



                                                                             <!--★タイトル★-->
                                                                             <!--PLG:CategoryContents↓-->
                                                                             <div><!--{$plg_categoryContents_category_contents|nl2br_html}--></div>
                                                                             <!--PLG:CategoryContents↑-->
                                                                                <h2 class="title"><!--{$tpl_subtitle|h}--></h2>
             SC_Helper_Transform                                               <!--▼検索条件-->
                                                                               <!--{if $tpl_subtitle == "検索結果"}-->
                                                                                  <ul class="pagecond_area">
                                                                                     <li><strong>商品カテゴリ:</strong><!--{$arrSearch.category|h}--></li>
                                                                                     <li><strong>商品名:</strong><!--{$arrSearch.name|h}--></li>
                                                                                  </ul>
                                                                               <!--{/if}-->
                                                                               <!--▲検索条件-->



Copyright c LOCKON CO.,LTD. All Rights Reserved.                                                                                                       55
テンプレート変更の仕組み
function prefilterTransform(&$source, LC_Page_Ex $objPage, $filename) {
    $objTransform = new SC_Helper_Transform($source);
    $template_dir = PLUGIN_UPLOAD_REALDIR . 'CategoryContents/templates/';
    switch($objPage->arrPageLayout['device_type_id']){
       case DEVICE_TYPE_MOBILE:
       case DEVICE_TYPE_SMARTPHONE:
       case DEVICE_TYPE_PC:
         // 商品一覧画面
         if (strpos($filename, 'products/list.tpl') !== false) {
          $objTransform->select('h2.title')->insertBefore(file_get_contents($template_dir . 'categorycontents_products_list_add.tpl'));
          }
          break;
        default:
          break;
      }
      $source = $objTransform->getHTML();
  }




Copyright c LOCKON CO.,LTD. All Rights Reserved.                                                                                   56
テンプレート変更の仕組み
function prefilterTransform(&$source, LC_Page_Ex $objPage, $filename) {

$objTransform = new SC_Helper_Transform($source);
      $template_dir = PLUGIN_UPLOAD_REALDIR . 'CategoryContents/templates/';
      switch($objPage->arrPageLayout['device_type_id']){
        case DEVICE_TYPE_MOBILE:
        case DEVICE_TYPE_SMARTPHONE:
        case DEVICE_TYPE_PC:
           // 商品一覧画面
           if (strpos($filename, 'products/list.tpl') !== false) {
$objTransform->select('h2.title')->insertBefore(
     file_get_contents($template_dir . 'categorycontents_products_list_add.tpl')
);
          }
          break;
        default:
          break;
      }
      $source = $objTransform->getHTML();
  }




Copyright c LOCKON CO.,LTD. All Rights Reserved.                               57
テンプレート変更の仕組み
function prefilterTransform(&$source, LC_Page_Ex $objPage, $filename) {

$objTransform = new SC_Helper_Transform($source);
      $template_dir = PLUGIN_UPLOAD_REALDIR . 'CategoryContents/templates/';
      switch($objPage->arrPageLayout['device_type_id']){
        case DEVICE_TYPE_MOBILE:
        case DEVICE_TYPE_SMARTPHONE:
        case DEVICE_TYPE_PC:
           // 商品一覧画面
           if (strpos($filename, 'products/list.tpl') !== false) {
                                                                               変更を加える
$objTransform->select('h2.title')->insertBefore(                                 ソース
     file_get_contents($template_dir . 'categorycontents_products_list_add.tpl')
);
          }
          break;
        default:
          break;
      }
      $source = $objTransform->getHTML();
  }




Copyright c LOCKON CO.,LTD. All Rights Reserved.                                        58
テンプレート変更の仕組み
function prefilterTransform(&$source, LC_Page_Ex $objPage, $filename) {

$objTransform = new SC_Helper_Transform($source);
      $template_dir = PLUGIN_UPLOAD_REALDIR . 'CategoryContents/templates/';
      switch($objPage->arrPageLayout['device_type_id']){
        case DEVICE_TYPE_MOBILE:

                                                                  要素を指定
        case DEVICE_TYPE_SMARTPHONE:
        case DEVICE_TYPE_PC:
           // 商品一覧画面
           if (strpos($filename, 'products/list.tpl') !== false) {
$objTransform->select('h2.title')->insertBefore(
     file_get_contents($template_dir . 'categorycontents_products_list_add.tpl')
);
          }
          break;
        default:
          break;
      }
      $source = $objTransform->getHTML();
  }




Copyright c LOCKON CO.,LTD. All Rights Reserved.                               59
テンプレート変更の仕組み
function prefilterTransform(&$source, LC_Page_Ex $objPage, $filename) {

$objTransform = new SC_Helper_Transform($source);
      $template_dir = PLUGIN_UPLOAD_REALDIR . 'CategoryContents/templates/';
      switch($objPage->arrPageLayout['device_type_id']){
        case DEVICE_TYPE_MOBILE:
        case DEVICE_TYPE_SMARTPHONE:
        case DEVICE_TYPE_PC:
                                                                               指定した要素の操作
           // 商品一覧画面
           if (strpos($filename, 'products/list.tpl') !== false) {
$objTransform->select('h2.title')->insertBefore(
     file_get_contents($template_dir . 'categorycontents_products_list_add.tpl')
);
          }
          break;
        default:
          break;
      }
      $source = $objTransform->getHTML();
  }




Copyright c LOCKON CO.,LTD. All Rights Reserved.                                       60
テンプレート変更の仕組み
function prefilterTransform(&$source, LC_Page_Ex $objPage, $filename) {

$objTransform = new SC_Helper_Transform($source);
                                                                プラグインで用意した
  $template_dir = PLUGIN_UPLOAD_REALDIR . 'CategoryContents/templates/';
  switch($objPage->arrPageLayout['device_type_id']){
    case DEVICE_TYPE_MOBILE:                                      テンプレートを指定
        case DEVICE_TYPE_SMARTPHONE:
        case DEVICE_TYPE_PC:
          // 商品一覧画面
          if (strpos($filename, 'products/list.tpl') !== false) {
$objTransform->select('h2.title')->insertBefore(
     file_get_contents($template_dir . 'categorycontents_products_list_add.tpl')
);
          }
          break;
        default:
          break;
      }
      $source = $objTransform->getHTML();
  }




Copyright c LOCKON CO.,LTD. All Rights Reserved.                               61
プラグインメインクラス


                             テンプレートで
                            変更した要素を指定

                                要素に対する操作



Copyright c LOCKON CO.,LTD. All Rights Reserved.   62
プラグインの作り方




  カテゴリ・コンテンツ。


Copyright c LOCKON CO.,LTD. All Rights Reserved.   63
Agenda




Copyright c LOCKON CO.,LTD. All Rights Reserved.            64
おまけ




Copyright c LOCKON CO.,LTD. All Rights Reserved.         65
おまけ




Copyright c LOCKON CO.,LTD. All Rights Reserved.         66

120512 phpカンファレンス用資料

  • 1.
  • 2.
    自己紹介 吉本 啓顕(よしもと ひろあき) 勤務先 株式会社ロックオン EC-CUBE プロジェクト担当 主な仕事 プロジェクト管理 開発 運用・サポート Copyright c LOCKON CO.,LTD. All Rights Reserved. 2
  • 3.
    運営会社紹介 株式会社ロックオン • 2001年6月4日 設立 • 従業員:54名 (平均:約30歳) • 本社:大阪(梅田) • 支社:東京(銀座)、シリコンバレー ベトナム(オフショア拠点) • 経営理念:Impact On The World Copyright c LOCKON CO.,LTD. All Rights Reserved. 3
  • 4.
    ロックオン 製品紹介 つくる 運用する 分析する はかる Copyright c LOCKON CO.,LTD. All Rights Reserved. 4
  • 5.
    今日のテーマ Copyright c LOCKONCO.,LTD. All Rights Reserved. 5
  • 6.
    Agenda Copyright c LOCKONCO.,LTD. All Rights Reserved. 6
  • 7.
    Agenda Copyright c LOCKONCO.,LTD. All Rights Reserved. 7
  • 8.
    EC-CUBEとは? Copyright c LOCKONCO.,LTD. All Rights Reserved. 8
  • 9.
    EC-CUBEとは? EC構築オープンソース として 国内No.1シェア Copyright c LOCKON CO.,LTD. All Rights Reserved. 9
  • 10.
    EC-CUBEとは? 1万7000店舗以上 Copyrightc LOCKON CO.,LTD. All Rights Reserved. 10
  • 11.
    EC-CUBEとは? Copyright c LOCKONCO.,LTD. All Rights Reserved. 11
  • 12.
    EC-CUBEとは? demonstration Copyright c LOCKON CO.,LTD. All Rights Reserved. 12
  • 13.
    Agenda Copyright c LOCKONCO.,LTD. All Rights Reserved. 13
  • 14.
    ソフトウェア要件 IIS Copyright c LOCKON CO.,LTD. All Rights Reserved. 14
  • 15.
    EC-CUBEの構造 request response Pageクラス controller Smarty SCクラス Viewクラス model view Copyright c LOCKON CO.,LTD. All Rights Reserved. 15
  • 16.
    EC-CUBEの構造 request response Pageクラス controller Smarty SCクラス Viewクラス model view Copyright c LOCKON CO.,LTD. All Rights Reserved. 16
  • 17.
    EC-CUBEの構造 request response Pageクラス controller Smarty SCクラス Viewクラス model view Copyright c LOCKON CO.,LTD. All Rights Reserved. 17
  • 18.
    EC-CUBEの構造 request response Pageクラス controller Smarty SCクラス Viewクラス model view Copyright c LOCKON CO.,LTD. All Rights Reserved. 18
  • 19.
    EC-CUBEの構造 request response Pageクラス controller Smarty SCクラス Viewクラス model view Copyright c LOCKON CO.,LTD. All Rights Reserved. 19
  • 20.
    EC-CUBEの構造 request response Pageクラス controller Smarty SCクラス Viewクラス model view Copyright c LOCKON CO.,LTD. All Rights Reserved. 20
  • 21.
    Agenda Copyright c LOCKONCO.,LTD. All Rights Reserved. 21
  • 22.
    プラグインで出来る事 ・EC-CUBEの本体処理に介入する。 ・テンプレートに変更を加える。 Copyright c LOCKON CO.,LTD. All Rights Reserved. 22
  • 23.
    プラグインで出来る事 ・EC-CUBEの本体処理に介入する。 ・テンプレートに変更を加える。 Copyright c LOCKON CO.,LTD. All Rights Reserved. 23
  • 24.
    プラグインで出来る事 ・フォームからのPOST値を変更する。 ・別のページに遷移させる。 ・全く別の処理を実行する。 Copyright c LOCKON CO.,LTD. All Rights Reserved. 24
  • 25.
    プラグインで出来る事 なんでも出来る。 Copyright c LOCKON CO.,LTD. All Rights Reserved. 25
  • 26.
    プラグインで出来る事 ・EC-CUBEの本体処理に介入する。 ・テンプレートに変更を加える。 Copyright c LOCKON CO.,LTD. All Rights Reserved. 26
  • 27.
    プラグインで出来る事 ・ボタンを追加する。 ・フォームを追加する。 ・テーブルを消す。 Copyright c LOCKON CO.,LTD. All Rights Reserved. 27
  • 28.
    プラグインで出来る事 request response Pageクラス controller Smarty SCクラス Viewクラス model view Copyright c LOCKON CO.,LTD. All Rights Reserved. 28
  • 29.
    Agenda Copyright c LOCKONCO.,LTD. All Rights Reserved. 29
  • 30.
    プラグインの作り方 何を作るのか? Copyright c LOCKON CO.,LTD. All Rights Reserved. 30
  • 31.
  • 32.
    プラグインの作り方 ①商品カテゴリー毎にデータを持たせる。 ②該当のカテゴリが選択・表示される際に データを持ってきて画面に表示する。 Copyright c LOCKON CO.,LTD. All Rights Reserved. 32
  • 33.
    プラグインの作り方 CategoryContents.tar.gz 用意するファイル CategoryContents.php (プラグインメインクラス) [必須] plugin_info.php (プラグイン情報) [必須] plugin_update.php (アップデートクラス) logo.png (縦65x横65ピクセル) categorycontents_admin_basis_category_add.tpl categorycontents_products_list_add.tpl Copyright c LOCKON CO.,LTD. All Rights Reserved. 33
  • 34.
    プラグインの作り方 ①商品カテゴリー毎にデータを持たせる。 ②該当のカテゴリが選択・表示される際に データを持ってきて画面に表示する。 Copyright c LOCKON CO.,LTD. All Rights Reserved. 34
  • 35.
    プラグインの作り方 SC_Helper_Plugin CategoryContents plugin LC_Page_Products_List controller LC_Page_Products_List_action_after Viewクラス view Copyright c LOCKON CO.,LTD. All Rights Reserved. 35
  • 36.
    プラグインの作り方 CategoryContents.tar.gz 用意するファイル CategoryContents.php (プラグインメインクラス) [必須] plugin_info.php (プラグイン情報) [必須] plugin_update.php (アップデートクラス) config.php (設定クラス) logo.png (縦65x横65ピクセル) categorycontents_admin_basis_category_add.tpl categorycontents_products_list_add.tpl Copyright c LOCKON CO.,LTD. All Rights Reserved. 36
  • 37.
    プラグインメインクラス CategoryContents.php (プラグインメインクラス) Copyright c LOCKON CO.,LTD. All Rights Reserved. 37
  • 38.
    プラグインメインクラス CategoryContents.php (プラグインメインクラス) Copyright c LOCKON CO.,LTD. All Rights Reserved. 38
  • 39.
    プラグインメインクラス CategoryContents.php (プラグインメインクラス) Copyright c LOCKON CO.,LTD. All Rights Reserved. 39
  • 40.
    プラグインメインクラス CategoryContents.php (プラグインメインクラス) Copyright c LOCKON CO.,LTD. All Rights Reserved. 40
  • 41.
    プラグインメインクラス フックポイント通過時 CategoryContents.php に実行する (プラグインメインクラス) コールバック関数 Copyright c LOCKON CO.,LTD. All Rights Reserved. 41
  • 42.
    プラグインメインクラス CategoryContents.php(プラグインメインクラス) function disp_contents($objPage) { // 選択されたカテゴリーID $category_id = $objPage->arrSearchData['category_id']; if(!empty($category_id)){ $array_category = CategoryContents::getCategoryByCategoryId($category_id); $objPage->plg_categoryContents_category_contents = $array_category['plg_categorycontents_category_contents']; } } Copyright c LOCKON CO.,LTD. All Rights Reserved. 42
  • 43.
    プラグインメインクラス CategoryContents.php(プラグインメインクラス) function disp_contents($objPage) { // 選択されたカテゴリーID $category_id = $objPage->arrSearchData['category_id']; if(!empty($category_id)){ カテゴリーのIDをキーに 登録されたコンテンツを取得する $array_category = CategoryContents::getCategoryByCategoryId($category_id); $objPage->plg_categoryContents_category_contents = $array_category['plg_categorycontents_category_contents']; } } Copyright c LOCKON CO.,LTD. All Rights Reserved. 43
  • 44.
    用意するファイル CategoryContents.tar.gz CategoryContents.php (プラグインメインクラス) [必須] plugin_info.php (プラグイン情報) [必須] plugin_update.php (アップデートクラス) config.php (設定クラス) logo.png (縦65x横65ピクセル) categorycontents_admin_basis_category_add.tpl categorycontents_products_list_add.tpl Copyright c LOCKON CO.,LTD. All Rights Reserved. 44
  • 45.
    プラグイン情報 plugin_info.php (プラグイン情報) Copyright c LOCKON CO.,LTD. All Rights Reserved. 45
  • 46.
    プラグイン情報クラス プラグインメインクラス plugin_info.php (プラグイン情報) Copyright c LOCKON CO.,LTD. All Rights Reserved. 46
  • 47.
    プラグイン情報クラス plugin_info.php (プラグイン情報) Copyright c LOCKON CO.,LTD. All Rights Reserved. 47
  • 48.
    プラグイン情報クラス フックポイント と plugin_info.php コールバック関数を定義 (プラグイン情報) Copyright c LOCKON CO.,LTD. All Rights Reserved. 48
  • 49.
    プラグインメインクラス plugin_info.php(プラグイン情報) class plugin_info { static $PLUGIN_CODE = "CategoryContents "; static $PLUGIN_NAME = "カテゴリ・コンテンツ"; static $PLUGIN_VERSION = "0.1"; static $COMPLIANT_VERSION = "2.12.0"; static $AUTHOR = “株式会社ロックオン"; static $DESCRIPTION = “カテゴリにコンテンツを表示。"; static $PLUGIN_SITE_URL = "http://www.ec-cube.net/"; 介入したいフックポイントとコールバック関数定義 static $AUTHOR_SITE_URL = "http:// www.ec-cube.net /"; static $CLASS_NAME = "SampleClassHook"; static $HOOK_POINTS = array( array(" LC_Page_Admin_Products_Category_action_after ", 'contents_set'), array(" LC_Page_Products_List_action_after ", 'disp_contents'), array("prefilterTransform", 'prefilterTransform')); } Copyright c LOCKON CO.,LTD. All Rights Reserved. 49
  • 50.
    プラグインメインクラス plugin_info.php(プラグイン情報) class plugin_info { static $PLUGIN_CODE = "CategoryContents "; static $PLUGIN_NAME = "カテゴリ・コンテンツ"; static $PLUGIN_VERSION = "0.1"; static $COMPLIANT_VERSION = "2.12.0"; static $AUTHOR = “株式会社ロックオン"; static $DESCRIPTION = “カテゴリにコンテンツを表示。"; static $PLUGIN_SITE_URL = "http://www.ec-cube.net/"; static $AUTHOR_SITE_URL = "http:// www.ec-cube.net /"; static $CLASS_NAME = "SampleClassHook"; static $HOOK_POINTS = array( array(" LC_Page_Admin_Products_Category_action_after ", 'contents_set'), array(" LC_Page_Products_List_action_after ", 'disp_contents'), array("prefilterTransform", 'prefilterTransform')); } Copyright c LOCKON CO.,LTD. All Rights Reserved. 50
  • 51.
    プラグインメインクラス plugin_info.php(プラグイン情報) class plugin_info { static $PLUGIN_CODE = "CategoryContents "; static $PLUGIN_NAME = "カテゴリ・コンテンツ"; static $PLUGIN_VERSION = "0.1"; static $COMPLIANT_VERSION = "2.12.0"; static $AUTHOR = “株式会社ロックオン"; static $DESCRIPTION = “カテゴリにコンテンツを表示。"; static $PLUGIN_SITE_URL = "http://www.ec-cube.net/"; static $AUTHOR_SITE_URL = "http:// www.ec-cube.net /"; static $CLASS_NAME = "SampleClassHook"; 介入したい場所 static $HOOK_POINTS = array( array(" LC_Page_Admin_Products_Category_action_after ", 'contents_set'), array(" LC_Page_Products_List_action_after ", 'disp_contents'), array("prefilterTransform", 'prefilterTransform')); } Copyright c LOCKON CO.,LTD. All Rights Reserved. 51
  • 52.
    プラグインメインクラス plugin_info.php(プラグイン情報) class plugin_info { static $PLUGIN_CODE = "CategoryContents "; static $PLUGIN_NAME = "カテゴリ・コンテンツ"; static $PLUGIN_VERSION = "0.1"; static $COMPLIANT_VERSION = "2.12.0"; static $AUTHOR = “株式会社ロックオン"; static $DESCRIPTION = “カテゴリにコンテンツを表示。"; static $PLUGIN_SITE_URL = "http://www.ec-cube.net/"; static $AUTHOR_SITE_URL = "http:// www.ec-cube.net /"; static $CLASS_NAME = "SampleClassHook"; static $HOOK_POINTS = array( 実行する関数 array(" LC_Page_Admin_Products_Category_action_after ", 'contents_set'), array(" LC_Page_Products_List_action_after ", 'disp_contents'), array("prefilterTransform", 'prefilterTransform')); } Copyright c LOCKON CO.,LTD. All Rights Reserved. 52
  • 53.
    プラグインメインクラス 実行したい関数を メインクラスに作成 作成した関数とフックポイントを 設定ファイルに定義 Copyright c LOCKON CO.,LTD. All Rights Reserved. 53
  • 54.
    テンプレート変更の仕組み SC_Helper_Plugin plugin テンプレート テンプレート ファイル ファイル テンプレート pre コンパイル ファイル 解析 filter ファイル 一度コンパイルファイルが生成されると 次回からはコンパイルファイルが参照される Copyright c LOCKON CO.,LTD. All Rights Reserved. 54
  • 55.
    テンプレート変更の仕組み <!--★タイトル★--> <h2 class="title"><!--{$tpl_subtitle|h}--></h2> <!--▼検索条件--> <!--{if $tpl_subtitle == "検索結果"}--> <ul class="pagecond_area"> <li><strong>商品カテゴリ:</strong><!--{$arrSearch.category|h}--></li> <li><strong>商品名:</strong><!--{$arrSearch.name|h}--></li> </ul> <!--{/if}--> <!--▲検索条件--> SC_Helper_Plugin plugin <!--★タイトル★--> <!--PLG:CategoryContents↓--> <div><!--{$plg_categoryContents_category_contents|nl2br_html}--></div> <!--PLG:CategoryContents↑--> <h2 class="title"><!--{$tpl_subtitle|h}--></h2> SC_Helper_Transform <!--▼検索条件--> <!--{if $tpl_subtitle == "検索結果"}--> <ul class="pagecond_area"> <li><strong>商品カテゴリ:</strong><!--{$arrSearch.category|h}--></li> <li><strong>商品名:</strong><!--{$arrSearch.name|h}--></li> </ul> <!--{/if}--> <!--▲検索条件--> Copyright c LOCKON CO.,LTD. All Rights Reserved. 55
  • 56.
    テンプレート変更の仕組み function prefilterTransform(&$source, LC_Page_Ex$objPage, $filename) { $objTransform = new SC_Helper_Transform($source); $template_dir = PLUGIN_UPLOAD_REALDIR . 'CategoryContents/templates/'; switch($objPage->arrPageLayout['device_type_id']){ case DEVICE_TYPE_MOBILE: case DEVICE_TYPE_SMARTPHONE: case DEVICE_TYPE_PC: // 商品一覧画面 if (strpos($filename, 'products/list.tpl') !== false) { $objTransform->select('h2.title')->insertBefore(file_get_contents($template_dir . 'categorycontents_products_list_add.tpl')); } break; default: break; } $source = $objTransform->getHTML(); } Copyright c LOCKON CO.,LTD. All Rights Reserved. 56
  • 57.
    テンプレート変更の仕組み function prefilterTransform(&$source, LC_Page_Ex$objPage, $filename) { $objTransform = new SC_Helper_Transform($source); $template_dir = PLUGIN_UPLOAD_REALDIR . 'CategoryContents/templates/'; switch($objPage->arrPageLayout['device_type_id']){ case DEVICE_TYPE_MOBILE: case DEVICE_TYPE_SMARTPHONE: case DEVICE_TYPE_PC: // 商品一覧画面 if (strpos($filename, 'products/list.tpl') !== false) { $objTransform->select('h2.title')->insertBefore( file_get_contents($template_dir . 'categorycontents_products_list_add.tpl') ); } break; default: break; } $source = $objTransform->getHTML(); } Copyright c LOCKON CO.,LTD. All Rights Reserved. 57
  • 58.
    テンプレート変更の仕組み function prefilterTransform(&$source, LC_Page_Ex$objPage, $filename) { $objTransform = new SC_Helper_Transform($source); $template_dir = PLUGIN_UPLOAD_REALDIR . 'CategoryContents/templates/'; switch($objPage->arrPageLayout['device_type_id']){ case DEVICE_TYPE_MOBILE: case DEVICE_TYPE_SMARTPHONE: case DEVICE_TYPE_PC: // 商品一覧画面 if (strpos($filename, 'products/list.tpl') !== false) { 変更を加える $objTransform->select('h2.title')->insertBefore( ソース file_get_contents($template_dir . 'categorycontents_products_list_add.tpl') ); } break; default: break; } $source = $objTransform->getHTML(); } Copyright c LOCKON CO.,LTD. All Rights Reserved. 58
  • 59.
    テンプレート変更の仕組み function prefilterTransform(&$source, LC_Page_Ex$objPage, $filename) { $objTransform = new SC_Helper_Transform($source); $template_dir = PLUGIN_UPLOAD_REALDIR . 'CategoryContents/templates/'; switch($objPage->arrPageLayout['device_type_id']){ case DEVICE_TYPE_MOBILE: 要素を指定 case DEVICE_TYPE_SMARTPHONE: case DEVICE_TYPE_PC: // 商品一覧画面 if (strpos($filename, 'products/list.tpl') !== false) { $objTransform->select('h2.title')->insertBefore( file_get_contents($template_dir . 'categorycontents_products_list_add.tpl') ); } break; default: break; } $source = $objTransform->getHTML(); } Copyright c LOCKON CO.,LTD. All Rights Reserved. 59
  • 60.
    テンプレート変更の仕組み function prefilterTransform(&$source, LC_Page_Ex$objPage, $filename) { $objTransform = new SC_Helper_Transform($source); $template_dir = PLUGIN_UPLOAD_REALDIR . 'CategoryContents/templates/'; switch($objPage->arrPageLayout['device_type_id']){ case DEVICE_TYPE_MOBILE: case DEVICE_TYPE_SMARTPHONE: case DEVICE_TYPE_PC: 指定した要素の操作 // 商品一覧画面 if (strpos($filename, 'products/list.tpl') !== false) { $objTransform->select('h2.title')->insertBefore( file_get_contents($template_dir . 'categorycontents_products_list_add.tpl') ); } break; default: break; } $source = $objTransform->getHTML(); } Copyright c LOCKON CO.,LTD. All Rights Reserved. 60
  • 61.
    テンプレート変更の仕組み function prefilterTransform(&$source, LC_Page_Ex$objPage, $filename) { $objTransform = new SC_Helper_Transform($source); プラグインで用意した $template_dir = PLUGIN_UPLOAD_REALDIR . 'CategoryContents/templates/'; switch($objPage->arrPageLayout['device_type_id']){ case DEVICE_TYPE_MOBILE: テンプレートを指定 case DEVICE_TYPE_SMARTPHONE: case DEVICE_TYPE_PC: // 商品一覧画面 if (strpos($filename, 'products/list.tpl') !== false) { $objTransform->select('h2.title')->insertBefore( file_get_contents($template_dir . 'categorycontents_products_list_add.tpl') ); } break; default: break; } $source = $objTransform->getHTML(); } Copyright c LOCKON CO.,LTD. All Rights Reserved. 61
  • 62.
    プラグインメインクラス テンプレートで 変更した要素を指定 要素に対する操作 Copyright c LOCKON CO.,LTD. All Rights Reserved. 62
  • 63.
  • 64.
    Agenda Copyright c LOCKONCO.,LTD. All Rights Reserved. 64
  • 65.
    おまけ Copyright c LOCKONCO.,LTD. All Rights Reserved. 65
  • 66.
    おまけ Copyright c LOCKONCO.,LTD. All Rights Reserved. 66

Editor's Notes

  • #2 デモは以上で これから本題の EC-CUBE のプラグイン機構についてご説明させて頂きます。 また前置きになってしまいますが プラグイン機構の前に EC-CUBE がどういった作りになっているかを解説させて頂きます。
  • #3 簡単に自己紹介させて頂きます。 今回ご紹介させて頂きます最新版 EC-CUBE12.0 プロジェクトを担当しております。 株式会社ロックオンの吉本です。 本日はどうぞよろしくお願いいたします。
  • #4 少し弊社ロックオンのご紹介をさせて頂きます。 本社を大阪に構えておりまして 東京・シリコンバレー支社 そして最近はベトナムにオフショア拠点
  • #5 事業内容としましては  E コマースやインターネット広告関連ソフトウェアの企画、開発、販売を行っております。 そして現在は、主に 4 つのプロダクトを展開しておりまして、ありがたいことに、そのうち、二つは国内シェア No.1 という地位をいただいております。 本日は、この中の一つ、 EC-CUBE の話をさせていただきますが、我々、 Impact On The World の理念のもと、世界に向けてインパクトある製品をリリースしていきますので、詳しく話が聞きたいとか、なんだったら、ロックオンで働きたいとかなんでも OK ですので、ご興味ありましたら、ブースも出店しておりますので是非お声がけください。
  • #7 さて、本日のアジェンダはこちらの4点となっています。
  • #8 さて、本日のアジェンダはこちらの4点となっています。
  • #9 EC-CUBE という名前の通り、 EC サイトを構築するためのツールとなっています。 弊社ロックオンが開発元となってオープンソースのプロダクトとなっています。 たくさんのコミッタ・パートナー様の御力もあって EC 構築オープンソースとして国内 No.1 シェアを獲得しており。 日本で EC 作るなら EC-CUBE というレベルまで来ているのかなとおもっております。
  • #10 EC-CUBE という名前の通り、 EC サイトを構築するためのツールとなっています。 弊社ロックオンが開発元となってオープンソースのプロダクトとなっています。 たくさんのコミッタ・パートナー様の御力もあって EC 構築オープンソースとして国内 No.1 シェアを獲得しており。 日本で EC 作るなら EC-CUBE というレベルまで来ているのかなとおもっております。
  • #11 EC-CUBE という名前の通り、 EC サイトを構築するためのツールとなっています。 弊社ロックオンが開発元となってオープンソースのプロダクトとなっています。 たくさんのコミッタ・パートナー様の御力もあって EC 構築オープンソースとして国内 No.1 シェアを獲得しており。 日本で EC 作るなら EC-CUBE というレベルまで来ているのかなとおもっております。
  • #12 EC-CUBE という名前の通り、 EC サイトを構築するためのツールとなっています。 弊社ロックオンが開発元となってオープンソースのプロダクトとなっています。 たくさんのコミッタ・パートナー様の御力もあって EC 構築オープンソースとして国内 No.1 シェアを獲得しており。 日本で EC 作るなら EC-CUBE というレベルまで来ているのかなとおもっております。
  • #13 もう少し EC-CUBE を理解して頂く為に 実際に EC-CUBE が動くところをデモで見て頂こうかなと思います。 < TOP > <商品一覧> <商品詳細> <管理画面> <受注一覧> <顧客一覧> <プラグイン管理> こちらが今回ご紹介させて頂きますプラグインを管理する為の 画面になります。 実際にインストールから実行している所を見て頂こうかと思います。 こちらサンプルになるんですが、パンくずを設定するプラグインをインストールしてあります。 今は無効になっているので動きません。 動きます。 というのが最新の EC-CUBE になります。
  • #14 さて、本日のアジェンダはこちらの4点となっています。
  • #15 まずシステム要件はこのようになっております。 ここにも書いてありますように IIS に対応しているのがすこし他のプロダクトとは違ったところなのかなと思います。
  • #16 EC-CUBE は MVC モデルで作られています。 大きく分けてこの3つのクラス群で EC-CUBE は成り立っています。 Page クラスが各ページごとにいます。 商品の詳細を表示するページクラス 受注の一覧を表示するページクラス ログインフォームを表示するページクラス ページが r リクエストされると各ページごとのこれらのクラスをロードされる。 これらのページクラスが呼び出すのクラスがモデルに相当する SC クラス群です。 DB の接続やメール系のクラスや CSV などのファイル操作系のクラスなど様々なクラスが存在し Page クラスはこれらのクラスを使って処理をします。 最後に必要な処理を終えた後にこの View クラスが呼ばれ ブラウザに表示します。 この際、 EC-CUBE ではテンプレートエンジンの Smarty を使っています。
  • #17 EC-CUBE は MVC モデルで作られています。 大きく分けてこの3つのクラス群で EC-CUBE は成り立っています。 Page クラスが各ページごとにいます。 商品の詳細を表示するページクラス 受注の一覧を表示するページクラス ログインフォームを表示するページクラス ページが r リクエストされると各ページごとのこれらのクラスをロードされる。 これらのページクラスが呼び出すのクラスがモデルに相当する SC クラス群です。 DB の接続やメール系のクラスや CSV などのファイル操作系のクラスなど様々なクラスが存在し Page クラスはこれらのクラスを使って処理をします。 最後に必要な処理を終えた後にこの View クラスが呼ばれ ブラウザに表示します。 この際、 EC-CUBE ではテンプレートエンジンの Smarty を使っています。
  • #18 EC-CUBE は MVC モデルで作られています。 大きく分けてこの3つのクラス群で EC-CUBE は成り立っています。 Page クラスが各ページごとにいます。 商品の詳細を表示するページクラス 受注の一覧を表示するページクラス ログインフォームを表示するページクラス ページが r リクエストされると各ページごとのこれらのクラスをロードされる。 これらのページクラスが呼び出すのクラスがモデルに相当する SC クラス群です。 DB の接続やメール系のクラスや CSV などのファイル操作系のクラスなど様々なクラスが存在し Page クラスはこれらのクラスを使って処理をします。 最後に必要な処理を終えた後にこの View クラスが呼ばれ ブラウザに表示します。 この際、 EC-CUBE ではテンプレートエンジンの Smarty を使っています。
  • #19 EC-CUBE は MVC モデルで作られています。 大きく分けてこの3つのクラス群で EC-CUBE は成り立っています。 Page クラスが各ページごとにいます。 商品の詳細を表示するページクラス 受注の一覧を表示するページクラス ログインフォームを表示するページクラス ページが r リクエストされると各ページごとのこれらのクラスをロードされる。 これらのページクラスが呼び出すのクラスがモデルに相当する SC クラス群です。 DB の接続やメール系のクラスや CSV などのファイル操作系のクラスなど様々なクラスが存在し Page クラスはこれらのクラスを使って処理をします。 最後に必要な処理を終えた後にこの View クラスが呼ばれ ブラウザに表示します。 この際、 EC-CUBE ではテンプレートエンジンの Smarty を使っています。
  • #20 EC-CUBE は MVC モデルで作られています。 大きく分けてこの3つのクラス群で EC-CUBE は成り立っています。 Page クラスが各ページごとにいます。 商品の詳細を表示するページクラス 受注の一覧を表示するページクラス ログインフォームを表示するページクラス ページが r リクエストされると各ページごとのこれらのクラスをロードされる。 これらのページクラスが呼び出すのクラスがモデルに相当する SC クラス群です。 DB の接続やメール系のクラスや CSV などのファイル操作系のクラスなど様々なクラスが存在し Page クラスはこれらのクラスを使って処理をします。 最後に必要な処理を終えた後にこの View クラスが呼ばれ ブラウザに表示します。 この際、 EC-CUBE ではテンプレートエンジンの Smarty を使っています。
  • #21 EC-CUBE は MVC モデルで作られています。 大きく分けてこの3つのクラス群で EC-CUBE は成り立っています。 Page クラスが各ページごとにいます。 商品の詳細を表示するページクラス 受注の一覧を表示するページクラス ログインフォームを表示するページクラス ページが r リクエストされると各ページごとのこれらのクラスをロードされる。 これらのページクラスが呼び出すのクラスがモデルに相当する SC クラス群です。 DB の接続やメール系のクラスや CSV などのファイル操作系のクラスなど様々なクラスが存在し Page クラスはこれらのクラスを使って処理をします。 最後に必要な処理を終えた後にこの View クラスが呼ばれ ブラウザに表示します。 この際、 EC-CUBE ではテンプレートエンジンの Smarty を使っています。
  • #22 さて、本日のアジェンダはこちらの4点となっています。
  • #29 EC-CUBE は MVC モデルで作られています。 大きく分けてこの3つのクラス群で EC-CUBE は成り立っています。 Page クラスが各ページごとにいます。 商品の詳細を表示するページクラス 受注の一覧を表示するページクラス ログインフォームを表示するページクラス ページが r リクエストされると各ページごとのこれらのクラスをロードされる。 これらのページクラスが呼び出すのクラスがモデルに相当する SC クラス群です。 DB の接続やメール系のクラスや CSV などのファイル操作系のクラスなど様々なクラスが存在し Page クラスはこれらのクラスを使って処理をします。 最後に必要な処理を終えた後にこの View クラスが呼ばれ ブラウザに表示します。 この際、 EC-CUBE ではテンプレートエンジンの Smarty を使っています。
  • #30 さて、本日のアジェンダはこちらの4点となっています。
  • #34 実例
  • #36 EC-CUBE は MVC モデルで作られています。 大きく分けてこの3つのクラス群で EC-CUBE は成り立っています。 Page クラスが各ページごとにいます。 商品の詳細を表示するページクラス 受注の一覧を表示するページクラス ログインフォームを表示するページクラス ページが r リクエストされると各ページごとのこれらのクラスをロードされる。 これらのページクラスが呼び出すのクラスがモデルに相当する SC クラス群です。 DB の接続やメール系のクラスや CSV などのファイル操作系のクラスなど様々なクラスが存在し Page クラスはこれらのクラスを使って処理をします。 最後に必要な処理を終えた後にこの View クラスが呼ばれ ブラウザに表示します。 この際、 EC-CUBE ではテンプレートエンジンの Smarty を使っています。
  • #37 実例
  • #38 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #39 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #40 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #41 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #42 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #43 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #44 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #45 実例
  • #46 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #47 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #48 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #49 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #50 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #51 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #52 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #53 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #54 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #56 場所は東京の勝どき駅から近くのホテルで行いました EC-CUBE 2回目の開発合宿という事なんですが 総勢30名近くのかなりコアなコミッターの皆様にお集まり頂きました。
  • #57 Smarty は大きく3つの段階に分けることができます。 元となるテンプレートファイル。 そして解析を行なって生成されるコンパイルファイル 最後に出力される形に固まった出力結果 いきなりテンプレートファイルから出力結果を生成するのではなく、テンプレートファイルを解析して PHP のコードに変換し、そのコードを実行することで最終的に出力結果を生成する、というように、段階を踏んで処理を行っています。 そして、このテンプレートを解析する、結果を出力するといった処理の前後にテンプレートだけでは書けないような処理の実行結果を追加したり、テンプレートの内容を書き換えるなどの独自の処理を追加することが出来ます。 これが「フィルタ」という機能です。 Smarty のフィルタには以下の 3 種類があります。 プリフィルタ ポストフィルタ アウトプットフィルタ それぞれフィルタ処理が実行されるタイミングが異なります。 上記の流れに当てはめてみると以下のようになります。
  • #58 Smarty は大きく3つの段階に分けることができます。 元となるテンプレートファイル。 そして解析を行なって生成されるコンパイルファイル 最後に出力される形に固まった出力結果 いきなりテンプレートファイルから出力結果を生成するのではなく、テンプレートファイルを解析して PHP のコードに変換し、そのコードを実行することで最終的に出力結果を生成する、というように、段階を踏んで処理を行っています。 そして、このテンプレートを解析する、結果を出力するといった処理の前後にテンプレートだけでは書けないような処理の実行結果を追加したり、テンプレートの内容を書き換えるなどの独自の処理を追加することが出来ます。 これが「フィルタ」という機能です。 Smarty のフィルタには以下の 3 種類があります。 プリフィルタ ポストフィルタ アウトプットフィルタ それぞれフィルタ処理が実行されるタイミングが異なります。 上記の流れに当てはめてみると以下のようになります。
  • #59 Smarty は大きく3つの段階に分けることができます。 元となるテンプレートファイル。 そして解析を行なって生成されるコンパイルファイル 最後に出力される形に固まった出力結果 いきなりテンプレートファイルから出力結果を生成するのではなく、テンプレートファイルを解析して PHP のコードに変換し、そのコードを実行することで最終的に出力結果を生成する、というように、段階を踏んで処理を行っています。 そして、このテンプレートを解析する、結果を出力するといった処理の前後にテンプレートだけでは書けないような処理の実行結果を追加したり、テンプレートの内容を書き換えるなどの独自の処理を追加することが出来ます。 これが「フィルタ」という機能です。 Smarty のフィルタには以下の 3 種類があります。 プリフィルタ ポストフィルタ アウトプットフィルタ それぞれフィルタ処理が実行されるタイミングが異なります。 上記の流れに当てはめてみると以下のようになります。
  • #60 Smarty は大きく3つの段階に分けることができます。 元となるテンプレートファイル。 そして解析を行なって生成されるコンパイルファイル 最後に出力される形に固まった出力結果 いきなりテンプレートファイルから出力結果を生成するのではなく、テンプレートファイルを解析して PHP のコードに変換し、そのコードを実行することで最終的に出力結果を生成する、というように、段階を踏んで処理を行っています。 そして、このテンプレートを解析する、結果を出力するといった処理の前後にテンプレートだけでは書けないような処理の実行結果を追加したり、テンプレートの内容を書き換えるなどの独自の処理を追加することが出来ます。 これが「フィルタ」という機能です。 Smarty のフィルタには以下の 3 種類があります。 プリフィルタ ポストフィルタ アウトプットフィルタ それぞれフィルタ処理が実行されるタイミングが異なります。 上記の流れに当てはめてみると以下のようになります。
  • #61 Smarty は大きく3つの段階に分けることができます。 元となるテンプレートファイル。 そして解析を行なって生成されるコンパイルファイル 最後に出力される形に固まった出力結果 いきなりテンプレートファイルから出力結果を生成するのではなく、テンプレートファイルを解析して PHP のコードに変換し、そのコードを実行することで最終的に出力結果を生成する、というように、段階を踏んで処理を行っています。 そして、このテンプレートを解析する、結果を出力するといった処理の前後にテンプレートだけでは書けないような処理の実行結果を追加したり、テンプレートの内容を書き換えるなどの独自の処理を追加することが出来ます。 これが「フィルタ」という機能です。 Smarty のフィルタには以下の 3 種類があります。 プリフィルタ ポストフィルタ アウトプットフィルタ それぞれフィルタ処理が実行されるタイミングが異なります。 上記の流れに当てはめてみると以下のようになります。
  • #62 Smarty は大きく3つの段階に分けることができます。 元となるテンプレートファイル。 そして解析を行なって生成されるコンパイルファイル 最後に出力される形に固まった出力結果 いきなりテンプレートファイルから出力結果を生成するのではなく、テンプレートファイルを解析して PHP のコードに変換し、そのコードを実行することで最終的に出力結果を生成する、というように、段階を踏んで処理を行っています。 そして、このテンプレートを解析する、結果を出力するといった処理の前後にテンプレートだけでは書けないような処理の実行結果を追加したり、テンプレートの内容を書き換えるなどの独自の処理を追加することが出来ます。 これが「フィルタ」という機能です。 Smarty のフィルタには以下の 3 種類があります。 プリフィルタ ポストフィルタ アウトプットフィルタ それぞれフィルタ処理が実行されるタイミングが異なります。 上記の流れに当てはめてみると以下のようになります。
  • #63 プラグインのメイン・コアとなるクラスです。 このクラスにはプラグイン側で実行する処理・関数を書いていきます。 インストール処理 アンインストール処理であったり フックポイントで実行するコールバック関数もこっちで定義します。
  • #65 さて、本日のアジェンダはこちらの4点となっています。
  • #66 プラグイン機構の説明は以上となります。 すこし駆け足となりましたが、オフィシャルサイトにも仕様書を載せておりますので ご興味あればご覧下さい。 それではこれから実際にこのプラグイン機構を使って作られたプラグインをいくつかご紹介したいと思います。 まだ正式版のリリース前ですが、4月上旬に東京の方でこのプラグイン機構を使った開発合宿を行って来ました。 その結果報告も織り交ぜつつご紹介いたします。
  • #67 プラグイン機構の説明は以上となります。 すこし駆け足となりましたが、オフィシャルサイトにも仕様書を載せておりますので ご興味あればご覧下さい。 それではこれから実際にこのプラグイン機構を使って作られたプラグインをいくつかご紹介したいと思います。 まだ正式版のリリース前ですが、4月上旬に東京の方でこのプラグイン機構を使った開発合宿を行って来ました。 その結果報告も織り交ぜつつご紹介いたします。