EC-CUBE カスタマイズ PHPを用いた動的ブロックの追加
カスタマイズ:基礎/ブロック追加
カスタマイズ:初級でもブロック追加について解説しましたが、
今度は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
-
- require_once(CLASS_EX_PATH . "page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Greeting_Ex.php");
-
- $objPage = new LC_Page_FrontParts_BLoc_''Greeting''_Ex();
- register_shutdown_function(array($objPage, "destroy"));
- $objPage->init();
- $objPage->process();
-
他のブロックファイルをもとに、require_onceで読み込まれるファイル名と、生成するオブジェクト名を変更してください。
- LC_Page_FrontParts_Bloc_Greeting_Ex.php
-
- require_once(CLASS_PATH . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Greeting.php");
-
- class LC_Page_FrontParts_Bloc_Greeting_Ex extends LC_Page_FrontParts_Bloc_Greeting {
-
-
- /**
- * Page を初期化する.
- *
- * @return void
- */
- function init() {
- parent::init();
- }
-
- /**
- * Page のプロセス.
- *
- * @return void
- */
- function process() {
- parent::process();
- }
-
- /**
- * デストラクタ.
- *
- * @return void
- */
- function destroy() {
- parent::destroy();
- }
- }
このファイルも同じフォルダに格納されている、他のブロックファイルを参考に、一部を変更してください。 require_onceで読み込むファイル名と、クラス名を変更します。
- LC_Page_FrontParts_Bloc_Greeting.php
- require_once(CLASS_PATH . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php");
- class LC_Page_FrontParts_Bloc_Greeting extends LC_Page_FrontParts_Bloc {
- /**
- * Page を初期化する.
- *
- * @return void
- */
- function init() {
- parent::init();
- $bloc_file = 'greeting.tpl';
- $this->setTplMainpage($bloc_file);
- }
- /**
- * Page のプロセス.
- *
- * @return void
- */
- function process() {
- if (defined("MOBILE_SITE") && MOBILE_SITE) {
- $objView = new SC_MobileView();
- } else {
- $objView = new SC_SiteView();
- }
- //あいさつ文を取得
- $this->greeting = $this->lfGetGreeting();
- $objView->assignobj($this);
- $objView->display($this->tpl_mainpage);
- }
- /**
- * モバイルページを初期化する.
- *
- * @return void
- */
- function mobileInit() {
- $this->tpl_mainpage = MOBILE_TEMPLATE_DIR . "frontparts/"
- . BLOC_DIR . 'greeting.tpl';
- }
- /**
- * Page のプロセス(モバイル).
- *
- * @return void
- */
- function mobileProcess() {
- $this->process();
- }
- /**
- * デストラクタ.
- *
- * @return void
- */
- function destroy() {
- parent::destroy();
- }
- //現在時刻から挨拶文を生成
- function lfGetGreeting(){
- //時刻を取得
- $now = date("G");
- //5時〜11時:朝
- //11時〜18時:昼
- //18時〜5時:夜
- if($now < "5"){
- $time_slot = "night";
- }elseif($now < "11"){
- $time_slot = "morning";
- }elseif($now < "18"){
- $time_slot = "daytime";
- }else{
- $time_slot = "night";
- }
- //時間帯に応じて挨拶文を設定
- switch($time_slot){
- case "morning";
- $greeting = "おはようございます";
- break;
- case "daytime";
- $greeting = "こんにちは";
- break;
- case "night";
- $greeting = "こんばんは";
- break;
- }
- return $greeting;
- }
- }
このファイルにロジックを書き込みます。
lfGetGreeting()で時刻に応じた挨拶文を生成し、process()でそれを取得し、表示側に渡しています。
ブロックファイルの準備
EC-CUBE カスタマイズ:初歩/ブロック追加で解説したのと同じように、
ブロックを追加してください。
$greetingに挨拶が格納されていますので、テンプレートファイルで呼び出します。
- <div style="border:solid red 2px;color:black;line-height:20px;margin-top:15px;text-align:center">
- <!––{$greeting}––>
- <⁄div>
ロジックとテンプレートのひも付け
データベースから、
dtb_bloc
テーブルを開いてください。
先程追加したブロックも含め、全てのブロックが表になっているはずです。
先程追加したブロックの「php_path」カラムに、
frontparts/bloc/greeting.php
を追加してください。
ロジックとテンプレートのひも付け
管理画面から、ブロックを任意の位置に置いてください。
これで先程の挨拶が表示されるようになります。
ただ、このプログラム自体は、あまり意味のないものですので、
任意のロジックをLC_Page_FrontParts_Bloc_***.php
に記述して、試してみてください。
EC-CUBEのデザイン・カスタマイズや、ECサイトの開発・構築でお困りなら、
ネットショップ構築パッケージEC-Orangeにお問い合わせください!
EC-CUBEのカスタマイズ・制作会社 強いネットショップ構築します|EC-Orange




