- ベストアンサー
セレクトボックスの選択結果をキープする方法
- PHP初心者の方が、Drupalのubercartモジュールを使用してセレクトボックスで商品の値段を選択する際に、保存時に選択した値をキープする方法についてアドバイスを求めています。
- 現在、セレクトボックスの初期値は0に設定されており、編集する度に値段を選択しなければならない問題が発生しています。
- 質問者は、#default_valueを変更することで値をキープできると思っていますが、ページの表示ができなくなってしまうという問題が発生しています。アドバイスを求めています。
- みんなの回答 (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
その他の回答 (2)
- blanc210
- ベストアンサー率55% (5/9)
'#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できていなかったり、といったことが考えられます。
お礼
早速のご回答ありがとうございます。 var_dumpで$node->sell_priceに値が正しくセットされているか確認してみましたが、値はしっかり入っていました。 価格を100円に設定したものでdumpしてみると、 string(9) "100.00000" となっていました。 しかし、やはり選択リストは0になっていました。 $node->sell_priceに小数点以下がセットされているのが邪魔しているんでしょうか?
補足
uc_store_format_price_field_value()を調べてみたところ、「小数点以下の桁数が最小となる形で価格が表示されます」ということでした。
- ponta1971
- ベストアンサー率30% (361/1191)
>自分がやるとどうしてもページの表示自体できなくなってしまいます。。。 どのようなやり方をしたのか、考え方だけでも書いたほうが回答を得やすいと思います。 で、すでに試された方法かもしれませんが・・・。 さらに、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の中で記述してしまったのがいけなかったんだと思います。初心者だしセンスなさすぎて自分が嫌になりそうです。。。 もっと調べてご回答いただいた方法を試してみます。
お礼
ご回答ありがとうございます。 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になるようになりました。 ご回答いただいた皆様、本当にありがとうございました。 また、機会がありましたら、よろしくお願い申し上げます。
補足
確認したら、Ubercartモジュールは最新版を利用していました。