バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 【奮闘中】合計金額に応じた手数料計算にて教えてください

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ganbaru
投稿日時: 2009/8/11 3:49
対応状況: −−−
新米
登録日: 2009/8/11
居住地:
投稿: 4
【奮闘中】合計金額に応じた手数料計算にて教えてください
初めてご相談させて頂きます。
過去ログを見ても明確な回答が得られていなかったようなので
記載させて頂きます。

現在、合計金額に応じた手数料計算の導入に奮闘しておりますが、
こちらのサイト
http://mook.jpn.org/archives/2007/10/charge.html
を参考に、小計金額を下記関数内で使用出来れば、
反映可能な段階まで到達しました。

data/class/pages/shopping/LC_Page_Shopping_Payment.php


 /* 支払い方法文字列の取得 */
function lfGetPaymentInfo($payment_id) {
global $total_pretax;
$objQuery = new SC_Query();
$where = "payment_id = ?";
$arrRet = $objQuery->select("payment_method, charge, charge_rate", "dtb_payment", $where, array($payment_id));
$arrRet[0]['charge'] = $arrRet[0]['charge']+ceil($total_pretax*$arrRet[0]['charge_rate']/100);
/* 基本手数料+<切上:(小計+送料)*加算手数料率> */ 
if($arrRet[0]['charge'] == "") {
$arrRet[0]['charge'] = "0"; //NULLの時はゼロ
} 
return (array($arrRet[0]['payment_method'], $arrRet[0]['charge'])); 
}



上記コード内の、global $total_pretax; で小計金額を参照して、
$arrRet[0]['charge']+ceil($total_pretax*$arrRet[0]['charge_rate']/100)の計算をさせる方法を教えてください。

素人ですが、
是非宜しくお願いします。

================
ec-cube 2.40
PHP 5.1.6
MySQL 5.0.45
================
seasoft
投稿日時: 2009/8/11 8:21
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7369
Re: 【奮闘中】合計金額に応じた手数料計算にて教えてください
多分、\data\class\helper\SC_Helper_DB.php だったかで、小計金額を計算するときに、グローバル変数にもセットしておくのでは?


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

ganbaru
投稿日時: 2009/8/11 13:38
対応状況: −−−
新米
登録日: 2009/8/11
居住地:
投稿: 4
Re: 【奮闘中】合計金額に応じた手数料計算にて教えてください
seasoft様

お忙しい中、ご回答いただきありがとうございます!

が、こちら素人でグローバル変数のセットの仕方が分かりません・・・。

背伸びしすぎている事は承知しておりますが、
何としても実装したい機能なので、もう少しご指導ください。

以下のあたりが、ご指摘いただいた、「SC_Helper_DB.php だったかで、小計金額を計算するとき」だと思うのですが、どのようにすればグローバル変数にセット出来るでしょうか?

どうぞ宜しくお願い致します。


function sfTotalConfirm($arrData, &$objPage, &$objCartSess, $arrInfo, $objCustomer = "") {
// 未定義変数を定義         
if (!isset($arrData['deliv_pref'])) $arrData['deliv_pref'] = "";
if (!isset($arrData['payment_id'])) $arrData['payment_id'] = "";
if (!isset($arrData['charge'])) $arrData['charge'] = ""; 
if (!isset($arrData['use_point'])) $arrData['use_point'] = "";
// 商品の合計個数
$total_quantity = $objCartSess->getTotalQuantity(true); 
// 税金の取得
$arrData['tax'] = $objPage->tpl_total_tax;
// 小計の取得
$arrData['subtotal'] = $objPage->tpl_total_pretax;// 合計送料の取得
$arrData['deliv_fee'] = 0;
// 商品ごとの送料が有効の場合
if (OPTION_PRODUCT_DELIV_FEE == 1) {
$arrData['deliv_fee']+= $objCartSess->getAllProductsDelivFee();
}
// 配送業者の送料が有効の場合
if (OPTION_DELIV_FEE == 1) { 
// 送料の合計を計算する
$arrData['deliv_fee'] += $this->sfGetDelivFee($arrData);
}
// 送料無料の購入数が設定されている場合
if(DELIV_FREE_AMOUNT > 0) {
if($total_quantity >= DELIV_FREE_AMOUNT) {
$arrData['deliv_fee'] = 0;
} 
}
// 送料無料条件が設定されている場合
if($arrInfo['free_rule'] > 0) {
// 小計が無料条件を超えている場合
if($arrData['subtotal'] >= $arrInfo['free_rule']) {                 
$arrData['deliv_fee'] = 0;             
}         
}          
// 合計の計算 
$arrData['total'] = $objPage->tpl_total_pretax;	
// 商品合計         
$arrData['total']+= $arrData['deliv_fee'];		
// 送料         
$arrData['total']+= $arrData['charge'];			
// 手数料         
// お支払い合計         
$arrData['payment_total'] = $arrData['total'] - ($arrData['use_point'] * POINT_VALUE);
// 加算ポイントの計算         
if (USE_POINT === false) { 
$arrData['add_point'] = 0;
} else {
$arrData['add_point'] = SC_Utils::sfGetAddPoint($objPage->tpl_total_point, $arrData['use_point'], $arrInfo);
if($objCustomer != "") {
// 誕生日月であった場合
if($objCustomer->isBirthMonth()) {
 $arrData['birth_point'] = BIRTH_MONTH_POINT;
$arrData['add_point'] += $arrData['birth_point'];
}
}
}
if($arrData['add_point'] < 0) {
$arrData['add_point'] = 0;         
}         
return $arrData;
}
seasoft
投稿日時: 2009/8/11 16:12
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7369
Re: 【奮闘中】合計金額に応じた手数料計算にて教えてください
いくつか方法はあるのですが、一般的な方法は下記に記載があります。また、スコープの概念も重要なので、把握しておくと良いと思います。

http://www.php.net/manual/ja/language.variables.scope.php


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

popo
投稿日時: 2009/8/14 4:25
対応状況: −−−
長老
登録日: 2008/10/1
居住地:
投稿: 189
Re: 【奮闘中】合計金額に応じた手数料計算にて教えてください
ganbaru様


この注文金額に応じた手数料の加算については、私も非常に興味があります。
もし解決できましたら、その導入方法を記載して頂けると助かります。

よろしくお願い致します。
ganbaru
投稿日時: 2009/8/19 5:08
対応状況: −−−
新米
登録日: 2009/8/11
居住地:
投稿: 4
Re: 【奮闘中】合計金額に応じた手数料計算にて教えてください
seasoft様

お返事遅れて申し訳ございません。

四苦八苦しまして、ようやく導入する事が出来ました!

初心者の為、果たしてあっているのか定かではございませんが、
なんとか動作しているようです。

有難うございます!
ganbaru
投稿日時: 2009/8/19 5:32
対応状況: 解決済
新米
登録日: 2009/8/11
居住地:
投稿: 4
Re: 【奮闘中】合計金額に応じた手数料計算にて教えてください
popo様

素人ですが、導入出来ました事をご報告いたします。

http://mook.jpn.org/archives/2007/10/charge.html

を参考に行いましたことを順に記載致します。

SQLにて、

ALTER TABLE dtb_payment ADD (
     charge_rate numeric     ); 
 ALTER TABLE dtb_order ADD (
     charge_rate numeric     );
 ALTER TABLE dtb_order_temp ADD (
     charge_rate numeric     );

でテーブル追加。

/data/class/pages/admin/basis/LC_Page_Admin_Basis_Payment.phpにて、
114行目あたりを以下に変更。

$col = “payment_id, payment_method, charge, rule, upper_rule, note, deliv_id, fix, charge_flg, charge_rate“;


管理画面テンプレの、
/data/Smarty/templates/default/admin/basis/payment.tpl
にて、

<td width=”60″>手数料(%)</td>


と、

<!&#8211;{if !$arrPaymentListFree[cnt].charge_rate}&#8211;>
<td align=”center”>-</td>
<!&#8211;{else}&#8211;>
<td align=”right”><!&#8211;{$arrPaymentListFree[cnt].charge_rate|escape|number_format}&#8211;></td>
<!&#8211;{/if}&#8211;>

を追加。

/data/class/pages/admin/basis/LC_Page_Admin_Basis_Payment_Input.php
184行目あたりに、

$this->objFormParam->addParam("加算手数料率", "charge_rate", PRICE_LEN, "n", array("EXIST_CHECK" , "MAX_LENGTH_CHECK"));


を追加し、
さらに、管理画面テンプレの、
/data/Smarty/templates/default/admin/basis/payment_input.tpl


<tr class=”fs12n”>
  <td width=”100″ bgcolor=”#f0f0f0″>加算手数料率</td>
  <td width=”340″ bgcolor=”#ffffff”>
  <!&#8211;{if $charge_flg == 2}&#8211;>
  設定できません
  <!&#8211;{else}&#8211;>
  <!&#8211;{assign var=key value=”charge_rate”}&#8211;>
  <span class=”red12″><!&#8211;{$arrErr[$key]}&#8211;></span>
  <input type=”text” name=”<!&#8211;{$arrForm[$key].keyname}&#8211;>” value=”<!&#8211;{$arrForm[$key].value|escape}&#8211;>” size=”10″ class=”box10″ maxlength=”<!&#8211;{$arrForm[$key].length}&#8211;>” style=”<!&#8211;{$arrErr[$key]|sfGetErrorColor}&#8211;>” />
   %
  <!&#8211;{/if}&#8211;>
  </td>
</tr>


を追加しました。

ここまでは、ほぼ参考サイト同様です。

最後に、/data/class/pages/shopping/LC_Page_Shopping_Payment.php


/* 支払い方法文字列の取得 */
から
/* 配送時間文字列の取得 */
まで

を以下に変更。


/* 支払い方法文字列の取得 */
	function lfGetPaymentInfo($payment_id) {
        global $total_pretax;
	global $total_tax;
	global $deliv_fee;
        $objCartSess = new SC_CartSession();
	$total_pretax = $objCartSess->getAllProductsTotal($arrInfo);
	$total_tax = $objCartSess->getAllProductsTax($arrInfo);
	$deliv_fee = $objCartSess->getAllProductsDelivFee();
	$objQuery = new SC_Query();
	$where = "payment_id = ?";
        $arrRet = $objQuery->select("payment_method, charge, charge_rate", "dtb_payment", $where, array($payment_id));
        $arrRet[0]['charge'] = $arrRet[0]['charge']+ceil(($total_pretax+$total_tax+$deliv_fee)*$arrRet[0]['charge_rate']/100);
		/* 基本手数料+<切上:(小計+送料)*加算手数料率> */
		if($arrRet[0]['charge'] == "") {
		$arrRet[0]['charge'] = "0"; //NULLの時はゼロ
		}
		return (array($arrRet[0]['payment_method'], $arrRet[0]['charge']));
}
    /* 配送時間文字列の取得 */


これで、管理画面より手数料率を入力して
確認しましたところ、動作が確認できました。

ソースを理解しての導入ではなく、
ミラクルで導入できましたので、一応ご参考までに。

不要・必要な箇所等あればご指摘ください。

宜しくお願いします。


EC-CUBEバージョン 2.3.4
PHPバージョン PHP 5.1.6
DBバージョン MySQL 5.0.45
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は90,434名です
総投稿数は110,401件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1695
8
red
1571
9
mcontact
1371
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.