![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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のところを変えると思いますが、自分がやるとどうしてもページの表示自体できなくなってしまいます。。。
つたない文章で申し訳ありませんが、アドバイスをいただけると非常に幸いです。
よろしくお願いいたします。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?e8efa67)
No.3ベストアンサー
- 回答日時:
解決に結びつくかどうかわかりませんが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
ご回答ありがとうございます。
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になるようになりました。
ご回答いただいた皆様、本当にありがとうございました。
また、機会がありましたら、よろしくお願い申し上げます。
No.2
- 回答日時:
'#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早速のご回答ありがとうございます。
var_dumpで$node->sell_priceに値が正しくセットされているか確認してみましたが、値はしっかり入っていました。
価格を100円に設定したものでdumpしてみると、
string(9) "100.00000"
となっていました。
しかし、やはり選択リストは0になっていました。
$node->sell_priceに小数点以下がセットされているのが邪魔しているんでしょうか?
No.1
- 回答日時:
>自分がやるとどうしてもページの表示自体できなくなってしまいます。
。。どのようなやり方をしたのか、考え方だけでも書いたほうが回答を得やすいと思います。
で、すでに試された方法かもしれませんが・・・。
さらに、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,
こんな感じです。
早速のご回答ありがとうございます。
>どのようなやり方をしたのか、考え方だけでも書いたほうが回答を得やすいと思います。
詳しい情報を書いてなくてすみません。。。
該当の箇所は配列になっていて、配列の中でDBにアクセスして値段を取得するように記述したらページが表示できなくなってしまいました。
たぶんarrayの中で記述してしまったのがいけなかったんだと思います。初心者だしセンスなさすぎて自分が嫌になりそうです。。。
もっと調べてご回答いただいた方法を試してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2つのプルダウンメニュから受け...
-
複数 selectフォームから今回on...
-
現在時刻を反映させた時刻のプ...
-
PHPでのセレクトボックスの値の...
-
laravelを利用してコントロール...
-
php ファイルアップロード サ...
-
複数チェックボックスの入力制...
-
syntax error, unexpected '}' ...
-
phpで変数を使ってcopyできない
-
重複を防ぐ記述について教えて...
-
検索後にチェックボックスのON/...
-
DBから読み込んだ買い物リスト...
-
複数のラジオボタングループを...
-
POSTを使わずに値を渡す方法
-
テキストボックスに初期値を入れる
-
PHPのリロード時の処理
-
HTMLのリンクをクリックするこ...
-
フォームの送信ボタンが押され...
-
画面が更新されてもチェックボ...
-
PHP ボタンが押されたら処理を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンとCSVの連動
-
phpでのセレクトボックスの値を...
-
php セレクトボックス 値取得
-
ドロップダウンで送信先を変更...
-
選択されたプルダウンの値を変...
-
連動させたいセレクトボックス...
-
【PHP&JavaScript】複数の別ウ...
-
複数のセレクトボックスを1つに...
-
プルダウンで選択された値を保持
-
phpでのselect値の取得・表記に...
-
<select>文、foreachと初期値設定
-
[Ethna]selectボックスに空値を...
-
2つのプルダウンメニュから受け...
-
プログラミング言語で、使える...
-
php メールフォーム プルダウ...
-
「"」(ダブルクォーテーション)...
-
セレクトしたときに全て初期状...
-
複数 selectフォームから今回on...
-
PHP で画面の一部だけを変えたい。
-
PHP プルダウンメニュー MYSQL
おすすめ情報