EC-CUBE EC-CUBEのカスタマイズ・制作会社 強いネットショップ構築します|EC-Orange

EC-Orange とは

EC-CUBE カスタマイズ

EC-CUBEインストール

EC-CUBE 環境構築ノウハウ

EC-CUBE 基本構成理解

ソースコード読解

EC-CUBE カスタマイズ:初歩

EC-CUBE カスタマイズ:基礎

EC-CUBE カスタマイズ:応用

EC-CUBE 機能拡張ノウハウ

EC-CUBE カスタマイズ    PHPを用いた動的ブロックの追加

    EC-CUBE カスタマイズ  >  EC-CUBE カスタマイズ:基礎  >  ブロック追加

カスタマイズ:基礎/ブロック追加

カスタマイズ:初級でもブロック追加について解説しましたが、
今度はPHPを用いて、動的な表示を行うブロックの追加について解説します。

    システム開発でお悩みの方は、ネットショップ構築パッケージ EC-Orange にお問い合わせください


PHPファイルの準備

ファイル構成を理解しよう
でも書きましたが、EC-CUBEのロジックは、3つのPHPファイルと、1つのテンプレートファイルから成り立っています。
(厳密に言うと、共通の処理部分は別のファイルが担当していますので、関係するファイルはもっと多くなります。ただし、これら共通の処理をするファイルを編集する必要はありません。)

ブロックについても同様に、

/html/frontparts/bloc/***.php
/data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_***_Ex.php
/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_***.php

の3つのファイルから成り立っています。
この3つを順に編集していきます。

今回は非常に簡単な例として、現在時間を取得し、時間に応じて
「おはようございます」「こんにちは」「こんばんは」
とあいさつを表示させるプログラムを表示させてみます。

  • greeting.php
  1. <‎?php
  2.  
  3. require_once(CLASS_EX_PATH . "page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Greeting_Ex.php");
  4.  
  5. $objPage = new LC_Page_FrontParts_BLoc_''Greeting''_Ex();
  6. register_shutdown_function(array($objPage, "destroy"));
  7. $objPage->init();
  8. $objPage->process();
  9.            
  10. ?>

他のブロックファイルをもとに、require_onceで読み込まれるファイル名と、生成するオブジェクト名を変更してください。

  • LC_Page_FrontParts_Bloc_Greeting_Ex.php
  1. <‎?php
  2.  
  3. require_once(CLASS_PATH . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Greeting.php");
  4.  
  5. class LC_Page_FrontParts_Bloc_Greeting_Ex extends LC_Page_FrontParts_Bloc_Greeting {
  6.  
  7.  
  8.     /**
  9.      * Page を初期化する.
  10.      *
  11.      * @return void
  12.      */
  13.     function init() {
  14.         parent::init();
  15.     }
  16.  
  17.     /**
  18.      * Page のプロセス.
  19.      *
  20.      * @return void
  21.      */
  22.     function process() {
  23.         parent::process();
  24.     }
  25.  
  26.     /**
  27.      * デストラクタ.
  28.      *
  29.      * @return void
  30.      */
  31.     function destroy() {
  32.         parent::destroy();
  33.     }
  34. }
  35. ?>

このファイルも同じフォルダに格納されている、他のブロックファイルを参考に、一部を変更してください。 require_onceで読み込むファイル名と、クラス名を変更します。

  • LC_Page_FrontParts_Bloc_Greeting.php
  1. <‎?php
  2.  
  3. require_once(CLASS_PATH . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php");
  4.  
  5. class LC_Page_FrontParts_Bloc_Greeting extends LC_Page_FrontParts_Bloc {
  6.  
  7.     /**
  8.      * Page を初期化する.
  9.      *
  10.      * @return void
  11.      */
  12.     function init() {
  13.         parent::init();
  14.         $bloc_file = 'greeting.tpl';
  15.         $this->setTplMainpage($bloc_file);
  16.     }
  17.  
  18.     /**
  19.      * Page のプロセス.
  20.      *
  21.      * @return void
  22.      */
  23.     function process() {
  24.         if (defined("MOBILE_SITE") && MOBILE_SITE) {
  25.             $objView = new SC_MobileView();
  26.         } else {
  27.             $objView = new SC_SiteView();
  28.         }
  29.        
  30.         //あいさつ文を取得
  31.         $this->greeting = $this->lfGetGreeting();
  32.        
  33.         $objView->assignobj($this);
  34.         $objView->display($this->tpl_mainpage);
  35.        
  36.     }
  37.  
  38.     /**
  39.      * モバイルページを初期化する.
  40.      *
  41.      * @return void
  42.      */
  43.     function mobileInit() {
  44.          $this->tpl_mainpage = MOBILE_TEMPLATE_DIR . "frontparts/"
  45.             . BLOC_DIR . 'greeting.tpl';
  46.     }
  47.  
  48.     /**
  49.      * Page のプロセス(モバイル).
  50.      *
  51.      * @return void
  52.      */
  53.     function mobileProcess() {
  54.         $this->process();
  55.     }
  56.  
  57.     /**
  58.      * デストラクタ.
  59.      *
  60.      * @return void
  61.      */
  62.     function destroy() {
  63.         parent::destroy();
  64.     }
  65.    
  66.     //現在時刻から挨拶文を生成
  67.     function lfGetGreeting(){
  68.         //時刻を取得
  69.         $now = date("G");
  70.    
  71.         //5時〜11時:朝
  72.         //11時〜18時:昼
  73.         //18時〜5時:夜
  74.         if($now < "5"){
  75.             $time_slot = "night";
  76.         }elseif($now < "11"){
  77.             $time_slot = "morning";
  78.         }elseif($now < "18"){
  79.             $time_slot = "daytime";
  80.         }else{
  81.             $time_slot = "night";
  82.         }
  83.    
  84.         //時間帯に応じて挨拶文を設定
  85.         switch($time_slot){
  86.        
  87.             case "morning";
  88.                 $greeting = "おはようございます";
  89.                 break;
  90.             case "daytime";
  91.                 $greeting = "こんにちは";
  92.                 break;
  93.             case "night";
  94.                 $greeting = "こんばんは";
  95.                 break;
  96.         }
  97.         return $greeting;
  98.     }
  99.    
  100. }
  101. ?>

このファイルにロジックを書き込みます。 lfGetGreeting()で時刻に応じた挨拶文を生成し、process()でそれを取得し、表示側に渡しています。

ブロックファイルの準備

EC-CUBE カスタマイズ:初歩/ブロック追加で解説したのと同じように、 ブロックを追加してください。
$greetingに挨拶が格納されていますので、テンプレートファイルで呼び出します。

  1. <div style="border:solid red 2px;color:black;line-height:20px;margin-top:15px;text-align:center">
  2.     <‎!––{$greeting}––>
  3. <⁄div>

ロジックとテンプレートのひも付け

データベースから、

dtb_bloc

テーブルを開いてください。

先程追加したブロックも含め、全てのブロックが表になっているはずです。
先程追加したブロックの「php_path」カラムに、

frontparts/bloc/greeting.php

を追加してください。

ロジックとテンプレートのひも付け

管理画面から、ブロックを任意の位置に置いてください。
これで先程の挨拶が表示されるようになります。

ただ、このプログラム自体は、あまり意味のないものですので、
任意のロジックをLC_Page_FrontParts_Bloc_***.php
に記述して、試してみてください。




EC-CUBEのデザイン・カスタマイズや、ECサイトの開発・構築でお困りなら、
ネットショップ構築パッケージEC-Orangeにお問い合わせください!