アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHP初心者です。よろしくお願いいたします。

drupalというCMSを使って、オークションサイトのようなものを作っています。

ubercartというモジュールで商品の投稿をするようにしていて、値段の設定をセレクトボックスで選ぶようにしています。

具体的には、uc_product.moduleというファイル内に以下のような配列があって、0・10・50・100の中から値段を選ぶようになっています。

================================
$form['base']['prices']['sell_price'] = array(
'#type' => 'select',
'#title' => t('Sell price'),
'#required' => TRUE,
'#options' => array(
'0' => ('0'),
'10' => ('10'),
'50' => ('50'),
'100' => ('100'),
),
'#default_value' => isset($node->sell_price) ? uc_store_format_price_field_value($node->sell_price) : 0,
'#description' => t('Customer purchase price.'),
'#weight' => 2,
'#size' => 1,
'#maxlength' => 35,
'#field_prefix' => $sign_flag ? '' : $currency_sign,
'#field_suffix' => $sign_flag ? $currency_sign : '',
);
================================

#default_valueで指定されているように、初期値は0になっています。そのため、商品の情報を編集する時に設定していた値段が初期値の0に戻ってしまうので、編集するたびに値段を選択しなければいけません。

保存時の値段をキープするようにしたいのですが、どうもやり方がわかりません。#default_valueのところを変えると思いますが、自分がやるとどうしてもページの表示自体できなくなってしまいます。。。

つたない文章で申し訳ありませんが、アドバイスをいただけると非常に幸いです。
よろしくお願いいたします。

A 回答 (3件)

>自分がやるとどうしてもページの表示自体できなくなってしまいます。

。。

どのようなやり方をしたのか、考え方だけでも書いたほうが回答を得やすいと思います。

で、すでに試された方法かもしれませんが・・・。
さらに、ubercartは知らないので、ソースを見た感じですが・・・。

'#default_value' => isset($node->sell_price) ? uc_store_format_price_field_value($node->sell_price) : 0,
質問者さんが書かれてる通り、この部分の0が初期値になっているみたいですね。
なので、ここが0固定である限り初期値は0になると思われます。
この0を何か変数にし、その変数に保存したデータを読込んでセット、データがなければ0をセットするという形にすればうまくいきませんか?

なんか、分かりにくい文章になりましたが、仮に作る変数を$Aとすると。

データがなければ、「$A=0」
データがあれば、「$A=データの値」



'#default_value' => isset($node->sell_price) ? uc_store_format_price_field_value($node->sell_price) : $A,

こんな感じです。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

>どのようなやり方をしたのか、考え方だけでも書いたほうが回答を得やすいと思います。

詳しい情報を書いてなくてすみません。。。

該当の箇所は配列になっていて、配列の中でDBにアクセスして値段を取得するように記述したらページが表示できなくなってしまいました。

たぶんarrayの中で記述してしまったのがいけなかったんだと思います。初心者だしセンスなさすぎて自分が嫌になりそうです。。。

もっと調べてご回答いただいた方法を試してみます。

お礼日時:2012/08/27 16:33

'#default_value' => isset($node->sell_price) ? uc_store_format_price_field_value($node->sell_price) : 0



の部分は 三項演算子 と呼ばれる書き方になっていますね。

(条件式) ? 条件式がTRUEの時の処理 : 条件式がFALSEの時の処理

なので、この場合
isset($node->sell_price)
がTRUEならば
uc_store_format_price_field_value($node->sell_price)
が初期値にはセットされるようになっているはずです。
uc_store_format_price_field_value()
の関数がどういうものかはわかりませんが(恐らく料金を3ケタずつカンマ区切りにする、とかですかね?)、まずは $node->sell_price に値が正しくセットされているかを dumpしてみるとよいでしょうね。
セットされていない場合は、 値を保存した と思ってても実はデータベースには入って無かったり、データベースには入ってても正常にselectできていなかったり、といったことが考えられます。

この回答への補足

uc_store_format_price_field_value()を調べてみたところ、「小数点以下の桁数が最小となる形で価格が表示されます」ということでした。

補足日時:2012/08/27 16:47
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

var_dumpで$node->sell_priceに値が正しくセットされているか確認してみましたが、値はしっかり入っていました。

価格を100円に設定したものでdumpしてみると、

string(9) "100.00000"

となっていました。

しかし、やはり選択リストは0になっていました。
$node->sell_priceに小数点以下がセットされているのが邪魔しているんでしょうか?

お礼日時:2012/08/27 16:25

解決に結びつくかどうかわかりませんが2点述べます。


1.
> '#default_value' => isset($node->sell_price) ? uc_store_format_price_field_value($node->sell_price) : 0

$node->sell_price に値が格納されていることは確認できたわけですね。
次は、
isset($node->sell_price)

uc_store_format_price_field_value($node->sell_price)
の値を確認してみてはどうでしょう。

2.
可能であればUbercartモジュールをアップデート。
過去になにやら数値の扱いで問題があったみたいですし。
http://drupal.org/node/1269952
http://drupal.org/project/ubercart

この回答への補足

確認したら、Ubercartモジュールは最新版を利用していました。

補足日時:2012/08/29 16:26
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

isset($node->sell_price)とuc_store_format_price_field_value($node->sell_price)の値も調べてみました。

100円に設定している商品で、echoで値を吐き出してみると、以下の値が返ってきました。

isset($node->sell_price) ⇒ 1
uc_store_format_price_field_value($node->sell_price) ⇒ 100.


uc_store_format_price_field_value($node->sell_price)の最後のピリオドが邪魔してるんじゃないかと思い、floor($node->sell_price)に変更して小数点以下を切り捨てにしてみました。すると、正常に設定していた価格が選択リストでselectedになるようになりました。

ご回答いただいた皆様、本当にありがとうございました。
また、機会がありましたら、よろしくお願い申し上げます。

お礼日時:2012/08/29 16:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!