ECCUBE2.13系のClass_Exのカスタマイズ

前回、テンプレートを、user_dir > package 以下に統合した。

で、もう1つ、手間が減らせる方法を思いついたのが、

class_exの統合。

***

早い話、各ページ上のリンクは、html上のphpを指定しており、
その中身が、どうなっているか、というと、

require_once './require.php';
require_once CLASS_EX_REALDIR . 'page_extends/LC_Page_Index_Ex.php';

$objPage = new LC_Page_Index_Ex();
$objPage->init();
$objPage->process();

※/html/index.php

実体はなく、class_exのファイルを読み込んでいるだけで、
LC_Page_Index_Exは、何しているかというと、
親のLC_Page_Indexを呼び出しているだけ。

require_once CLASS_REALDIR . 'pages/LC_Page_Index.php';

class LC_Page_Index_Ex extends LC_Page_Index
{
 function init() {
     parent::init();
 }
 function process() {
     parent::process();
} }

※/data/class_extends/page_extends/LC_Page_Index_ex.php

LC_Page_Indexの方を、直接書き換えている人も多いと思うが、
アップデートのことを考えると、
LC_Page_Index_Exを、拡張するのが正しい。

※3.0が出たので、2.13系のアップデートはないけど。

 

いろいろやっていて、ふと閃いた。

 

拡張するときは、なにも、LC_Page_Index_Ex.phpでなくても、
index.phpに、LC_Page_Index_Ex.phpを書き足して、
そこで、拡張クラスを書けば良いんじゃない???

 

つまり、こういうこと。

require_once './require.php';
// require_once CLASS_EX_REALDIR . 'page_extends/LC_Page_Index_Ex.php';
// ※ ↑ 読み込まずに、その実体を、↓にコピー

require_once CLASS_REALDIR . 'pages/LC_Page_Index.php';
class LC_Page_Index_Ex extends LC_Page_Index
{
 function init() {
 parent::init();
 }
 function process() {
 parent::process();
} }

$objPage = new LC_Page_Index_Ex();
$objPage->init();
$objPage->process();

※文中のコメントに書いているとおり。

こうすることで、
_data > class_extends > page_extends を開かなくても、
URLで指し示されたPHPを、直接開けば、編集できるようになるわけだ。

ということで、

と合わせて、

なんで、こういうふうに、元々の設計しなかったんだろう???

PS.
ところどころ、ajaxとかつかってあるが、(特にスマホ・テンプレ)
使いにくくて仕方ない!
PC用とスマホ用と、2つ修正するのは、面倒だが、
フレキシブルテンプレートを入れてみるも、
さらにajaxてんこ盛り+CSSの嵐なので、諦めた・・・・

ECCUBE2.13系のClass_Exのカスタマイズ
Tagged on: