バージョン選択

フォーラム

メニュー

オンライン状況

66 人のユーザが現在オンラインです。 (45 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 66
もっと...

サイト内検索

質問 > フロント機能 > 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 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,280名です
総投稿数は109,687件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.