Eccube

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の嵐なので、諦めた・・・・

-

ECCUBE 2.13.5系 * 会員登録の手間を減らす

昔の名残で、
未だに、スマホの迷惑メールを解除していない人が多く、
メールが届くか?、届かないか?
実際には、送ってみないと、わかりません。

ECCUBEにおいては、会員登録でメール承認式にしないかぎり、
注文メールが届いたか、どうか、判断がつきません。
(それでも、メアド間違いなど、不達の場合はある)

***

特に悲惨なのは、非会員の場合、
マイページも使えず、通知すら出来ない状況で、

「届いていない」という連絡を待つよりも、
「メールが届かなくても、マイページ見てね」という、方針にすべく、
これを回避する、唯一の方法は、

会員登録必須にしてしまうこと。

 

ただ、会員登録がページ切り替えが多く、手間が多いと感じるので、
なるだけページを省略する。

会員登録をすれば、マイページから、
メールの送信履歴も見れるわけで、
決済完了画面に、その説明を加えてやるだけで良い。

会員登録ページを削る、実際の作業


プログラム本体の、大掛かりな変更必要があるかと思っていたら、
ほとんど、テンプレートの修正だけで済む

(重要)会員登録のメール承認は、しないものとする。

これが、一番の手間・・・

必要なプラグイン

  • RegisterWhileShopping
    ※注文完了画面でも会員登録可、とあるが、
    実際には、完了1つ前の確認画面で、パスワードなどを入力する。
    (入力せずに、スルーも可)

いじるところ

  1. cart/index.tpl?->?mtb_constants.php
  2. shopping/nonmember.tpl
  3. plugin > RegisterWhileShopping/templates/*/plg_RegisterWhileShopping_shopping_confirm.tpl

たったこれだけw

***

?1. cart/index.tpl?-> cache/mtb_constants.php

/shopping/ に、移行するリンクを変更する。

160行目あたり。(ほぼ文末)

img/button/btn_buystep.jpg" alt="購入手続きへ" name="confirm" /-->
↓

  購入手続きへ

↑ 正常に、動きません!

※たまたま、登録出来ていた環境(セッション)で、テストしていたのですが、
別のPCでトライしたところ、カートに戻ってしまうことが、発覚。
直接/shopping/?mode=nonmemerに移行すると、
カート内の情報が登録できていないので、カートに戻ってきてしまうため、

やはり、cart.phpは通らなくてはならず、
通った後に、/shopping/?mode=nonmemer に飛ばすのが、正解。

.

代替え案として、実際に変更箇所したは、これだけ。
data/cache/mtb_constants.php

define('SHOPPING_URL', HTTPS_URL . "shopping/" . DIR_INDEX_PATH. '?mode=nonmember');

大幅なソースの変更が必要だと、思っていたところ、
パラメーターの変更だけで、済んでしまいます。

やってることは、/shopping/に渡すとき、

  • ログイン
  • 会員登録する
  • 登録せずに購入

を選ばせないように、
getで「mode = nonmember?」を渡して、入力を促します。
※LC_Page_Shopping.phpでは、
$_REQUEST[‘mode’]で処理されているので、postでなく、getでOK。

2.?shopping/nonmember.tpl

未登録ばかりじゃないので、登録済みの型用に、ログイン・フォームを移植
shopping/index.phpから、単に<form>~</form>をコピー。

貼り付けただけで、ここでログインしても、
支払い選択のページにちゃんと移動する。

ECCUBE nonmemberで会員登録省略

だいたいこんな感じで、
一応、会員登録が必要な旨と、会員規約をリンクで表示する。

※ダウンロード系なので、入力は最小になってます。

3. plg_RegisterWhileShopping_shopping_confirm.tpl

また、パスワードなどを入れない場合、
素通り出来るように設計してあるので、
パスワードを忘れた時のヒントの「選択してください」のOptionをコメントアウト。

<!--
選択してください  --->

これで、

パスと、ヒントの答えを入れないと、通れない仕組みになります。

***

下記をご記入いただくだけで、注文完了と同時に会員登録ができます。会員登録せずにご購入いただく場合は、下記に何も記入せずにお進みください。

は、
消すなり、上手な日本語に、置き換えて下さい。

課題

プラグインRegisterWhileShoppingが、登録済みメアドか判断してくれるのですが、
完了間際のページじゃなく、メアド入力するページに処理を入れたほうが親切ですね。
プラグイン内の

 $email_flg = SC_Helper_Customer_Ex::sfCheckRegisterUserFromEmail($arrForm['email']);

を、class_ex/shopping/LC_Page_Shopping_Ex.phpに、
移植し、エラー処理を加えて下さい。

PS.

今回は、コード丸写しが少なく、ごめんなさいネw

-