バージョン選択

フォーラム

メニュー

オンライン状況

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

PR

デザインテンプレート EC-CUBE3.0版が登場!
広告掲載について

サイト内検索

質問 > フロント機能 > 商品登録画面での割引金額の計算表示

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
aozora
投稿日時: 2013/3/21 2:17
対応状況: −−−
常連
登録日: 2013/3/21
居住地:
投稿: 40
商品登録画面での割引金額の計算表示
はじめまして、
お世話になります。どうか宜しくお願い致します。

管理機能の商品登録画面(商品管理/商品登録)で各種の割引金額が表示されるようにできるかどうかと思案しています。

販売価格を入力すると、予めDBに設定した各種の割引率(作成済み)に、入力した販売価格を掛けた金額が割引金額A,B,C,Dという金額として自動的に計算されて表示される仕組みです。

販売価格

割引金額A
割引金額B
割引金額C
割引金額D

只今試行錯誤していますが、どのファイルでどのような記述をすればよいか、ご教授頂けませんでしょうか。宜しくお願い致します。

[EC-CUBE]2.12.1
[データベース] MySQL
[WEBサーバ] Apache
[OS] XP 
[PHP] PHP 5.2.17

fukap
投稿日時: 2013/3/21 13:35
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 商品登録画面での割引金額の計算表示
ちなみに割引率は、データベースにどのように定義されましたか?

また、販売価格 x 各割引率 で求めた割引金額は、データベースに格納するのでしょうか。
それとも単に表示するだけでよいのでしょうか?
aozora
投稿日時: 2013/3/21 18:07
対応状況: −−−
常連
登録日: 2013/3/21
居住地:
投稿: 40
Re: 商品登録画面での割引金額の計算表示
Fukap様

お世話になります。
ご返信頂きましてありがとうございます。

割引率はDBにdtb_discountというテーブルを作り、各種の割引率番号をdiscount_idとして、それぞれの割引率をvalue(float)という形式にしております。

計算された割引金額はdtb_products_classにdiscount_price1、discount_price2といった形式で格納したいと考えております。

他に何か必要な情報、不足している情報がありましたらご連絡頂ければ幸いです。

ご教授のほど宜しくお願い致します。
fukap
投稿日時: 2013/3/21 18:58
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 商品登録画面での割引金額の計算表示
割引金額をデータベースに格納して利用したいのであれば、
まずは格納するための処理から書いていくと良いかと思います。

data/class/pages/admin/products/LC_Page_Admin_Products_Product.php のソースを見ると、
lfRegistProductメソッドあたりでDB登録しているようです。

規格を使用する場合と使用しない場合で処理が分かれているようですが、
仮に規格を使用しないのであれば、lfInsertDummyProductClassメソッドで
最終的にDB格納を行っているようです。

なので、DB格納時に使用している $sqlval 配列に、割引価格1や割引価格2を代入してあげれば、
いけそうな気がします。

$sqlval['creator_id'] = strlen($_SESSION['member_id']) >= 1 ? $_SESSION['member_id'] : '0';

// 以下の記述を追加
$rate1 = $objQuery->getCol('discount_price1', 'dtb_discount', 'discount_id = ?', array('1'));
$rate2 = $objQuery->getCol('discount_price2', 'dtb_discount', 'discount_id = ?', array('2'));
$sqlval['discount_price1'] = $sqlval['price02'] * $rate1;
$sqlval['discount_price2'] = $sqlval['price02'] * $rate2;

if (strlen($sqlval['product_class_id']) == 0) {

想像で書いているので、参考程度によろしくです。
aozora
投稿日時: 2013/3/24 17:20
対応状況: −−−
常連
登録日: 2013/3/21
居住地:
投稿: 40
Re: 商品登録画面での割引金額の計算表示
Fukap様

ご教授いただきありがとうございます。
流れがわかりました。

ご教授どおり以下のように試しました。getCol(内のrateはdtb_discountで割引率を入力したフィールド名(カラム名)です。

$rate1 = $objQuery->getCol('rate', 'dtb_discount', 'discount_id = ?', array('1'));
$sqlval['discount_price1'] = $sqlval['price02'] * $rate1;

結果は、Unsupported operand types on・・(1307)というエラーが表示されました。
$rate1 = $objQuery->getCol( の行が1307に当たります。

以下を試みましたら、エラーもでず、割引金額がDBに格納され、商品登録画面にも表示されました。

$rate1 = 0.03;
$sqlval['discount_price1'] = $sqlval['price02'] * $rate1;

よって、以下の記述で$rate1に値(設定した割引率)が入っていないのかなと思っております。

$rate1 = $objQuery->getCol('rate', 'dtb_discount', 'discount_id = ?', array('1'));

()内の’を“に変更したり、ご指摘の通りrateをdiscount_price1としたり、array('1')をarray('discount_id')としたり、またはarray('discount_id' =='1')としたり、’rate’と’dtb_discount’の順序を逆にしたりと試しましておりますが、同じ結果になります。

どうしたら宜しいかご教授いただけませんでしょうか。
sumida
投稿日時: 2013/3/24 18:22
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 638
Re: 商品登録画面での割引金額の計算表示
$rate1 = $objQuery->getCol('rate', 'dtb_discount', 'discount_id = ?', array('1'));
の戻り値は、
data/class/SC_Query.phpの関数getColによれば、

/**
* SELECT 文の実行結果を 1列のみ取得する.
*
* @param string $table テーブル名
* @param string $col カラム名
* @param string $where 付与する WHERE 句
* @param array $arrWhereVal プレースホルダに挿入する値
* @return array SQL の実行結果の配列
*/

という事で、戻り値がarrayになっているのでは?
aozora
投稿日時: 2013/3/25 15:25
対応状況: −−−
常連
登録日: 2013/3/21
居住地:
投稿: 40
Re: 商品登録画面での割引金額の計算表示
Sumida様、Fukap様、

ご返信頂きましてありがとうございます。

data/class/SC_Query.phpは以下の様になっているということですね。
/**
* SELECT 文の実行結果を 1列のみ取得する.
*
* @param string $table テーブル名
* @param string $col カラム名
* @param string $where 付与する WHERE 句
* @param array $arrWhereVal プレースホルダに挿入する値
* @return array SQL の実行結果の配列
*/
function getCol($col, $table = '', $where = '', $arrWhereVal = array()) {
$sql = $this->getSql($col, $table, $where, $arrWhereVal);
$sql = $this->dbFactory->sfChangeMySQL($sql);

$sth =& $this->prepare($sql);
if (PEAR::isError($sth) && $this->force_run) {
return;
}

ということは、テーブルdtb_discountからwhereがdiscount_id=1のカラムrateを$rate1に挿入するには以下をどう記述したらよいでしょうか。

$rate1 = $objQuery->getCol('rate', 'dtb_discount', 'discount_id = ?', array('1'));

ありとあらゆることを試しておりますが、エラーがでます。何かご教授お願い致します。
fukap
投稿日時: 2013/3/26 14:40
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 商品登録画面での割引金額の計算表示
getColメソッドの返り値が配列であれば、以下のような感じでいけませんかね?

$sqlval['creator_id'] = strlen($_SESSION['member_id']) >= 1 ? $_SESSION['member_id'] : '0';

// 以下の記述を追加
$rate1 = $objQuery->getCol('discount_price1', 'dtb_discount', 'discount_id = ?', array('1'));
$rate2 = $objQuery->getCol('discount_price2', 'dtb_discount', 'discount_id = ?', array('2'));
$sqlval['discount_price1'] = $sqlval['price02'] * $rate1[0];
$sqlval['discount_price2'] = $sqlval['price02'] * $rate2[0];

if (strlen($sqlval['product_class_id']) == 0) {
aozora
投稿日時: 2013/3/26 17:37
対応状況: −−−
常連
登録日: 2013/3/21
居住地:
投稿: 40
Re: 商品登録画面での割引金額の計算表示
Fukap様、Sumida様、

表示されました。すごいです。これは有識者でなければ分かりません。
さすがでございます。ご丁寧にご対応頂きましてありがとうございます。


今もう一つ直面しており、もしすぐ分かるのであればご教授ねがいます。

表示された各々の割引価格の横に各々の割引率である$rate1, $rate2, $rate3・・を表示させたいと思いadmin/product/product.tpl内に販売価格の部分を丸ごとコピー、貼り付けし、<!--{$arrErr.price02}-->を<!--{$arrErr.rate1}-->と変更し、試しているのですが表示されません。どこに問題がありますでしょうか。
yuh
投稿日時: 2013/3/26 18:11
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1389
Re: 商品登録画面での割引金額の計算表示
<!--{$arrErr.rate1}-->って基本$arrErrはエラー関係を入れるのでそこが間違ってないですか?
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

 



ログイン


EC-CUBEペイメント

クレジットカード情報の非保持化対応

統計情報

総メンバー数は19,766名です
総投稿数は82,463件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1632
4
yuh
1389
5
red
1064
6
fukap
907
7
shutta
827
8 ramrun 789
9
tsuji
784
10
umebius
712
11
tao_s
651
12 sumida 638
13
homan
633
14
468
630
15 karin 609
16 DELIGHT 571
17
patapata
502
18
flealog
483
19 tonton 436
20
ecbg
387


ネットショップの壺

EC-CUBEガイドブック
Copyright© LOCKON CO.,LTD. All Rights Reserved.