0

私は CakePHP を初めて使用します。Web アプリケーションにタイムゾーン機能を実装しています。選択ボックスに時間を表示するために、このタイムゾーン ヘルパー クラスを使用しています。

http://bakery.cakephp.org/articles/MarkAlanEvans/2009/12/17/updated-timezone-helper

私の見解では、このような選択ボックスでタイムゾーンをエコーし​​ています

  echo $this->Timezone->select('timezone');

私が今やっているのは、ユーザーが選択した時間の値を取得してから、データベースのタイムゾーンのフィールドを更新することです...私が今欲しいのは、ユーザーがタイムゾーンを再度変更したいとき、彼が自分の時間をどのように見ることができるかですデフォルト値としてのセレクトボックスの古いタイムゾーン..最初に、セレクトボックスにデフォルト値を追加する方法がわからない

私のヘルパークラスにはこの機能があります

 function select($fieldname, $label="Please Choose a timezone") { 

     $list = $this->Form->input($fieldname, array("type"=>"select", "label"=>$label, "options"=>$this->timezones, "error"=>"Please choose a timezone")); 
    return $this->output($list); 
  } 

2番目のことは、デフォルト値を表示したい場合です。明らかに、データベースからクエリを実行してから、ユーザーの古いタイムゾーンを取得する必要があります..したがって、問題は、デフォルト値をヘルパークラスにアタッチする必要がある場合ですこのような例

   $list = $this->Form->input($fieldname,  array("type"=>"select",'default'=>'$oldtimezone', "label"=>$label, "options"=>$this->timezones, "error"=>"Please choose a timezone")); 
    return $this->output($list);

そのためには、ヘルパー クラスでモデルをロードしてから、ヘルパー クラスでクエリを実行する必要がありますか? それは可能ですか?それとも、cakephp や mvc のルールに反するつもりはないのでしょうか? それで、次の質問は、モーダルをヘルパー内にロードする方法です。

このようにここにデフォルト値を追加できれば

  echo $this->Timezone->select('timezone',array('default'=>'oldtimezone'));

次に、コントローラーからこのビューに変数を渡すだけなので、ヘルパークラスを変更する必要はないと思います

4

1 に答える 1

0

デフォルト値をビューに渡す適切な方法は、コントローラーの else ブロックで行うことです。

if (posted) {
    //validate and save
} else {
    //default values here
    $this->request->data['Modelname']['timezone'] = $timeZoneFromDb;
}

このようにして、コントローラーのロジックを活用し、ビュー/ヘルパーで何もする必要はありません。

詳細については、 http://www.dereuromark.de/2010/06/23/working-with-forms/を参照してください (デフォルト値セクション)。

于 2013-06-28T16:37:38.690 に答える