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のところを変えると思いますが、自分がやるとどうしてもページの表示自体できなくなってしまいます。。。
つたない文章で申し訳ありませんが、アドバイスをいただけると非常に幸いです。
よろしくお願いいたします。
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の中で記述してしまったのがいけなかったんだと思います。初心者だしセンスなさすぎて自分が嫌になりそうです。。。
もっと調べてご回答いただいた方法を試してみます。
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.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になるようになりました。
ご回答いただいた皆様、本当にありがとうございました。
また、機会がありましたら、よろしくお願い申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- Access(アクセス) Access DTPickerの初期表示月を変えたい 1 2022/08/02 08:55
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- C言語・C++・C# C言語初心者です、、、お助けください 2 2023/03/14 20:08
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- ルーター・ネットワーク機器 IPv6に対応したルーターを選ぶのにまったくの素人の僕によくわかりません、https://otega 6 2023/07/11 18:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウンとCSVの連動
-
PHP セレクトボックスの値 GET...
-
phpのプルダウンメニューで選ん...
-
複数 selectフォームから今回on...
-
【PHP&JavaScript】複数の別ウ...
-
2つのプルダウンメニュから受け...
-
phpでのselect値の取得・表記に...
-
PHPで画像の渡しが上手く行きま...
-
ファイルアップローダーで送信...
-
phpのカウンタのリセット方法
-
HTMLで前の画面に戻る時、入力...
-
phpでチェックボックスでの値の...
-
テキストボックスに初期値を入れる
-
laravelを利用してコントロール...
-
phpでの複数選択チェックボック...
-
PHPの初心者です。現在チェック...
-
<input type="hidden" >で配列...
-
formの外にあるチェックボック...
-
複数行のデータ一括更新に関して
-
PHP ボタンが押されたら処理を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンとCSVの連動
-
「"」(ダブルクォーテーション)...
-
ラジオボタンの値を受け取ってP...
-
<select>文、foreachと初期値設定
-
phpでのセレクトボックスの値を...
-
php セレクトボックス 値取得
-
複数のセレクトボックスを1つに...
-
複数 selectフォームから今回on...
-
2つのプルダウンメニュから受け...
-
phpでのselect値の取得・表記に...
-
foreachで次の行の値を取得して...
-
ウェブ上で選択した複数行の内...
-
CodeIgniter/set_value()
-
ループ処理
-
連動させたいセレクトボックス...
-
現在時刻を反映させた時刻のプ...
-
プルダウンリスト(コンボボッ...
-
PHP で画面の一部だけを変えたい。
-
phpでカレンダー作成
-
プルダウンで選択された値を保持
おすすめ情報