포럼: osCommerce カスタマイズ (Thread #28072)

オプション価格の改造について (2010-12-03 15:12 by Anonymous #54582)

こんにちわニシムラともうします。
products_attributeの機能を改造して金額を変える事を試みております。

特に利用出来るcontributonが見当たらなかったので、皆さんに
知恵をお借りして何とか実現させたいところです。
実用例としては印刷屋さん

商品登録を一つの商品に対して1000,2000,3000...と、
テーブルproductsにp_qtyというカラムを新たに作成して入力しています。

これに対してオプションで
加工基本料金+版下代金+一枚あたりの加工コスト*商品枚数
を追加するために

products_attributeテーブルに以下のカラム
x_price :版下代金
p_price :一枚あたりの加工コスト
を追加して設定しました。

まずは商品詳細での表示部分 ../catalog/product_info.php
if ($products_attributes['total'] > 0) { 以下の

$products_options_query = tep_db_query("select 〜
のなかに、 pa.x_price, pa.price,を追記して、その下の

$products_options_array[sizeof($products_options_array)-1]['text'] .=
以後が表示している箇所らしいのでここに以下の式を当て込んでみました
display_total_price($products_options['options_values_price']+$products_options['x_price']+($products_options['p_price']*$product_info['p_qty'])

これで商品詳細のオプション金額の表示は出来たので購入ページに移動してみると
../catalog/shopping_cart.php
ここには反映されていないようです。


ソースを見ているとたぶん関連しているファイルがいくつかあるようで
../catalog/shopping_cart.php
../catalog/includes/classes/shoping_cart.php
../catalog/includes/modules/order_details.php
の3つだと思うのですが、試しに
../catalog/includes/classes/shoping_cart.phpを弄ってみました

// attributes price以下に金額を表示する箇所をみつけたので
$this->total += $qty * $attribute_price['options_values_price'];
とその下の同じようなセクション内の
$attributes_price += $attribute_price['options_values_price'];
このふたつ。おそらく前者は合計金額を算出しており
後者はオプションの金額表示を担当していると思われるので、

手前の箇所で
$attribute_price_query = tep_db_query("select options_values_price,
x_price,p_priceを呼び出しておいて、表示部で以下のようにしてみた。

$this->total += $qty * $attribute_price['options_values_price']+$attribute_price['x_price']+($attribute_price['p_price']*$product['p_qty']);
一応合計金額には反映されている模様。

つぎにオプション金額の表示部分も同じようにすればできると思ったのですが
*$product['p_qty']が取得出来ずに悩んでおります。

と、長々と説明いたしましたが疑問点は3つ
1.機能を実現するには以上のファイルの書き換えだけで済むのか?(勘違いな事してない?)
2.最後の行でのオプション金額を表示する際に積算する$product['p_qty']の方法。
3.order_detail.phpはどうしたら良いのか?

なるべく内容を削って説明してみたつもりですが
アドバイス、または具体的なソースを頂ければありがたいです。
よろしくお願いします。

Reply to #54582×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login