質問 > フロント機能 > extendsクラスの変更方法 |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ma-ma |
投稿日時: 2014/9/26 17:49
対応状況: −−−
|
常連 登録日: 2014/9/22 居住地: 投稿: 55 |
extendsクラスの変更方法 始めまして、
ec-cube初心者です。 お支払方法変更のカスタマイズを行っているのですが、 extendsクラスの変更方法がよく分かっておりません。 現在、LC_Page_Shopping_Payment.php内のinitメソッド内に $this->arrOPTION = $masterData->getMasterData("mtb_gift"); lfInitParamファイル内に $objFormParam->addParam("ギフト","add_option_gift",INT_LEN,"n",array("NUM_CHECK")); を追加しました。 上記のコード追加を行いたいのですが、LC_Page_Shopping_Payment_Ex.phpにはどのように記載すればよろしいでしょうか? 下記方法でコーディングを行ったら、データが取れていない項目がございました。 ------------------------- class LC_Page_Shopping_Payment_Ex extends LC_Page_Shopping_Payment { /** * Page を初期化する. * * @return void */ function init() { parent::init(); $masterData = new SC_DB_MasterData_Ex(); //カスタム:ギフトの追加について $this->arrOPTION = $masterData->getMasterData("mtb_gift"); } /** * Page のプロセス. * * @return void */ function process() { parent::process(); } function lfInitParam(&$objFormParam, $deliv_only, &$arrShipping){ //parent::lfInitParam(); //オプション:ギフトの登録 $objFormParam->addParam("ギフト","add_option_gift",INT_LEN,"n",array("NUM_CHECK")); } } ------------------------- 説明がうまくできてないかと思いますが、ご返答頂ければ幸いです。 よろしくお願いいたします。 |
poru |
投稿日時: 2014/9/26 18:18
対応状況: −−−
|
半人前 登録日: 2014/4/17 居住地: 南国 投稿: 20 |
Re: extendsクラスの変更方法 parent::lfInitParam(); のコメントアウトを外し、一番下に持ってきてみてください。
function lfInitParam(&$objFormParam, $deliv_only, &$arrShipping){ //オプション:ギフトの登録 $objFormParam->addParam("ギフト","add_option_gift",INT_LEN,"n",array("NUM_CHECK")); parent::lfInitParam(); } |
yona |
投稿日時: 2014/9/26 18:19
対応状況: −−−
|
半人前 登録日: 2012/2/10 居住地: 投稿: 25 |
Re: extendsクラスの変更方法 ECCUBEのバージョンの記載がないので手元にある2.13.2を見ながらですが。
lfInitParam() において、 //parent::lfInitParam(); parent(ベース処理) の処理呼び出しをコメントアウトされていらっしゃいますが、 parent にはパラメタセット(setParam)と パラメータのコンバート(convParam)があると思うので、 それで取得できない項目があるのではないかと思います。 親の処理は全部コピーされていたりしますか? |
y_matsu |
投稿日時: 2014/9/27 15:52
対応状況: −−−
|
新米 登録日: 2014/8/7 居住地: 投稿: 6 |
Re: extendsクラスの変更方法 ma-maさん
ご覧になっているかもしれませんが、class_extendsについての参考ページです。 http://www.ec-cube.net/tsubo/2014/03/17/356 (ec-cubeのプログラムはそのまま、カスタマイズを別箇所に記載することが可能です。) 今回の件に関しまして、 LC_Page_Shopping_Payment.phpにコード追加したのであれば Ex側にはコード追加の必要はないと思われます。 (逆にEx側のみでも対応可能ではと思われます) Exのコード記述を削除するとどうなりますでしょうか? データが取れていないとはどういった状況かをもう少し詳細に記載していただくことでも、 もっとコメントできるかと思います。 参考になれば幸いです。 |
ma-ma |
投稿日時: 2014/9/29 11:31
対応状況: −−−
|
常連 登録日: 2014/9/22 居住地: 投稿: 55 |
Re: extendsクラスの変更方法 ご連絡が遅くなり申し訳ございません、
ご教示頂いた通り修正をおこなったら、エラーが発生いました。 ----------- Fatal error(E_ERROR): Call to a member function addParam() on a non-object on [C:\xampp\htdocs\eccube\data\class\pages\shopping\LC_Page_Shopping_Payment.php(262)] ----------- こちらの部分は下記になります。 ----------- $objFormParam->addParam('配送業者', 'deliv_id', INT_LEN, 'n', array('EXIST_CHECK', 'MAX_LENGTH_CHECK', 'NUM_CHECK')); ----------- 申し訳ございませんが、よろしくお願いいたします。 |
yona |
投稿日時: 2014/9/29 11:44
対応状況: −−−
|
半人前 登録日: 2012/2/10 居住地: 投稿: 25 |
Re: extendsクラスの変更方法 parentのコメントアウトを外すやり方(poruさん提案の方法)で対応されたのだとすれば、
parentの処理呼び出しの際に引数を渡されていないのではないでしょうか。 parent::lfInitParam($objFormParam, $deliv_only, $arrShipping); extends側で受け取っている引数をそのまま親(parent)の処理に渡してください。 (ただし、第一、第三引数の頭についている "&" はつけてはいけません。) |
ma-ma |
投稿日時: 2014/9/29 11:49
対応状況: −−−
|
常連 登録日: 2014/9/22 居住地: 投稿: 55 |
Re: extendsクラスの変更方法 ご連絡がおそくなり、申し訳ございません。
親の処理というのは、LC_Page_Shopping_Payment.phpでよろしかったでしょか? 親の処理はコピーしておりません。 下記がLC_Page_Shopping_Payment_EX.phpの全体コードとなります。 ---------------- require_once CLASS_REALDIR . 'pages/shopping/LC_Page_Shopping_Payment.php'; /** * 支払い方法選択 のページクラス(拡張). * * LC_Page_Shopping_Payment をカスタマイズする場合はこのクラスを編集する. * * @package Page * @author LOCKON CO.,LTD. * @version $Id: LC_Page_Shopping_Payment_Ex.php 22926 2013-06-29 16:24:23Z Seasoft $ */ class LC_Page_Shopping_Payment_Ex extends LC_Page_Shopping_Payment { /** * Page を初期化する. * * @return void */ function init() { parent::init(); $masterData = new SC_DB_MasterData_Ex(); //カスタム:ギフトの追加について $this->arrOPTION = $masterData->getMasterData("mtb_gift"); } /** * Page のプロセス. * * @return void */ function process() { parent::process(); } function lfInitParam(&$objFormParam, $deliv_only, &$arrShipping){ //parent::lfInitParam(); //オプション:ギフトの登録 $objFormParam->addParam("ギフト","add_option_gift",INT_LEN,"n",array("NUM_CHECK")); } } ---------------- こちらに関しては、親の処理をまるまるコピーしないとだめなのででしょうか? 親クラスのlfInitParamメソッドに記載がされているので、継承されているクラスでは記載が必要ないかと思っておりました。。 恐れ入りますが、ご教示のほどよろしくお願いいたします。 |
ma-ma |
投稿日時: 2014/9/29 11:55
対応状況: −−−
|
常連 登録日: 2014/9/22 居住地: 投稿: 55 |
Re: extendsクラスの変更方法 ご返答ありがとうございました。
parent::lfInitParam($objFormParam, $deliv_only, $arrShipping); の記載で問題なく処理が行われました。 親のメソッドを呼び出すときは、引数が必要なのですね。 勉強になりました! もし、親のメソッドを呼び出さない場合は、親のメソッドのすべての記載をコピーしないとダメという認識で大丈夫でしょうか? |
ma-ma |
投稿日時: 2014/9/29 11:59
対応状況: −−−
|
常連 登録日: 2014/9/22 居住地: 投稿: 55 |
Re: extendsクラスの変更方法 ご連絡ありがとうございます。
この度、バージョンアップも見越して、Exファイルに記述をして、カスタマイズを行っておりました。 ただ、extendsクラスの使い方をわかっていなくて困っておりました。 送っていただいたURLの記事、参考にさせていただきます! 今回の問題に関しては、yonaさん poruさんの方法で解決できそうです。 また、わからないことがございましたら、ご教示頂ければ幸いです。 今後ともよろしくお願いいたします。 |
yona |
投稿日時: 2014/9/29 12:00
対応状況: −−−
|
半人前 登録日: 2012/2/10 居住地: 投稿: 25 |
Re: extendsクラスの変更方法 >こちらに関しては、親の処理をまるまるコピーしないとだめなのででしょうか?
>親クラスのlfInitParamメソッドに記載がされているので、継承されているクラスでは記載が必要ないかと思っておりました。。 extendsって確かに「継承」ではありますが、 親と同名のfunctionを定義した時点でそれは上書き(オーバーライド といいます)となってしまうので、 実質親の処理は機能しないです。 なので、今回修正動作したというのは「きちんと親が呼び出せた」ということです。 親が呼び出せなければコピーをする必要があるというのは、つまりそういうことですね。 PHPのマニュアルでいろいろ説明されているので参考にしてくださいませ。 http://php.net/manual/ja/language.oop5.basic.php |
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |