デフォルトのログインブロックは、ログインするとサイトトップに移動してしまいます。
ログインしても画面移動を行わず、単にログイン状態になるだけのほうが便利だと思うので変更してみます。
幸いなことにデフォルトのログインフォームにはログイン元のページを示すurlパラメータが最初からくっついているので、ログイン終了後にそこにリダイレクトさせれば解決しそうです。
ログイン先のURLは
http://eccube.localhost/login_check.php
呼ばれるファイルは、順に
/html/frontparts/login_check.php
/data/class_extends/page_extends/frontparts/LC_Page_FrontParts_LoginCheck_Ex.php
/data/class/pages/frontparts/LC_Page_FrontParts_LoginCheck.php
/data/class/pages/LC_Page.php
となっています。
具体的にログインに成功した場合の処理を行っているのはLC_Page_FrontParts_LoginCheck::process()の以下の部分です。
でだ、EC-CUBEのデフォルト動作を修正する場合は/data/class/以下は触らずに、そこに対応する/data/class_extends/を触れ、ということになっています。
つまりLC_Page_FrontParts_LoginCheck::process()の動作を修正するかわりにLC_Page_FrontParts_LoginCheck_Ex::process()を修正すればよいのですが、LC_Page_FrontParts_LoginCheck::process()はひとつのメソッドに動作を全部詰め込んでいるせいで一部だけの修正というのができないんだこれが。
画面表示までやらせるなよ。いくらなんでも。
parent::process()が完全に死にメソッドじゃないか。
EC-CUBEはとにかく粒度が荒い。
LC_Page_FrontParts_LoginCheck_Ex::process()にLC_Page_FrontParts_LoginCheck::process()を全部コピペし、上記の部分だけをこのように修正。
あっさり完成しました。
が、結局全部まるごとコピペしなければならないというこの作りはいただけない。
今回はやってませんが、プログラムを作成する際は各機能毎にメソッドに分けるようにしましょう。
そうなっていれば、今回の場合もリダイレクトするメソッドだけをオーバーライドすれば済んでいたはずですし。
あと問題点として、POSTで移動した後のページからログインするとPOSTで渡したパラメータが無くなるのでエラーになったりおかしくなったりします。
メソッドを見て処理を分岐するなり、ログインブロックでPOSTパラメータを全部常時一緒に送るようにしたりといったことが必要になります。
面倒なのでやめたほうがよかったかもしれない。
EC-CUBEの記事
ログインしても画面移動を行わず、単にログイン状態になるだけのほうが便利だと思うので変更してみます。
幸いなことにデフォルトのログインフォームにはログイン元のページを示すurlパラメータが最初からくっついているので、ログイン終了後にそこにリダイレクトさせれば解決しそうです。
ログイン先のURLは
http://eccube.localhost/login_check.php
呼ばれるファイルは、順に
/html/frontparts/login_check.php
/data/class_extends/page_extends/frontparts/LC_Page_FrontParts_LoginCheck_Ex.php
/data/class/pages/frontparts/LC_Page_FrontParts_LoginCheck.php
/data/class/pages/LC_Page.php
となっています。
具体的にログインに成功した場合の処理を行っているのはLC_Page_FrontParts_LoginCheck::process()の以下の部分です。
1
2
3
4
5
|
if($objCustomer->getCustomerDataFromEmailPass(
$arrForm['login_pass'], $arrForm['login_email'], true)) {
$this->sendRedirect($this->getLocation(URL_DIR, array(), false));
exit;
}
|
でだ、EC-CUBEのデフォルト動作を修正する場合は/data/class/以下は触らずに、そこに対応する/data/class_extends/を触れ、ということになっています。
つまりLC_Page_FrontParts_LoginCheck::process()の動作を修正するかわりにLC_Page_FrontParts_LoginCheck_Ex::process()を修正すればよいのですが、LC_Page_FrontParts_LoginCheck::process()はひとつのメソッドに動作を全部詰め込んでいるせいで一部だけの修正というのができないんだこれが。
画面表示までやらせるなよ。いくらなんでも。
parent::process()が完全に死にメソッドじゃないか。
EC-CUBEはとにかく粒度が荒い。
LC_Page_FrontParts_LoginCheck_Ex::process()にLC_Page_FrontParts_LoginCheck::process()を全部コピペし、上記の部分だけをこのように修正。
1
2
3
4
5
6
|
if($objCustomer->getCustomerDataFromEmailPass(
$arrForm['login_pass'], $arrForm['login_email'], true)) {
$this->sendRedirect($this->getLocation(
$_REQUEST['url'], array(), false));
exit;
}
|
あっさり完成しました。
が、結局全部まるごとコピペしなければならないというこの作りはいただけない。
今回はやってませんが、プログラムを作成する際は各機能毎にメソッドに分けるようにしましょう。
そうなっていれば、今回の場合もリダイレクトするメソッドだけをオーバーライドすれば済んでいたはずですし。
あと問題点として、POSTで移動した後のページからログインするとPOSTで渡したパラメータが無くなるのでエラーになったりおかしくなったりします。
メソッドを見て処理を分岐するなり、ログインブロックでPOSTパラメータを全部常時一緒に送るようにしたりといったことが必要になります。
面倒なのでやめたほうがよかったかもしれない。
EC-CUBEの記事
PR
トラックバック
トラックバックURL: