yii フレームワーク ドロップダウンを使用してカスケード メニューを作成します
多くの場合、フォーム、カスケード都市、またはカスケード カテゴリやその他の機能が必要になります。ドロップダウン ボックスが 2 つあり、一方の値はもう一方のドロップダウン ボックスに依存します。 Yii の組み込み ajax 機能を使用すると、このようなドロップダウン ボックスを作成できます。これを実装する方法を以下に示します。
最初はフォームのビューです。国を表示するフォームが表示され、国に基づいて都市が表示されます。
プログラムコードプログラムコード
echo CHtml::dropDownList('country_id','', array(1=>'アメリカ',2=>'フランス',3=>'日本') ,
array(
'ajax' => array(
'type'=>'POST', //リクエストタイプ
'url'=>'dynamiccities', // 呼び出すURL
'update'=> ; '#city_id', //更新するセレクター
//'data'=>'js:javascript ステートメント'
//すべてのフォーム値を渡すためにデータ キーを省略します
)));他のドロップダウンによって埋められるため空です
echo CHtml::dropDownList('city_id','', array());
最初のドロップダウン ボックスは、次の値と名前のペアで構成されます。国の構成。 。これが変更されると、ajax リクエストは現在のコントローラーの「ダイナミシティ」アクションによって完了します。リクエストの結果 (「dynamiccities」アクションの出力) は、2 番目の ID が #city_id であるドロップダウン ボックスに置き換えられます。
次はコントローラー アクションです。これは 2 番目のドロップダウン ボックスに入力する HTML を出力します。また、最初のドロップダウン ボックスの値によっても異なります。
プログラムコードプログラムコード
public function actionDynamiccities()
{
$data=Location::model()->findAll('parent_id=:parent_id',
array(':parent_id'=> ( int) $_POST['country_id']));
$data=CHtml::listData($data,'id','name');
foreach($data as $value=>$name)
{
を通じて を通じて を通じて を通じて を通じて を通じて を通じて ‐‐‐‐‐‐‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ { parent_id は最初のドロップダウン ボックスの値です。これらすべての都市がラベルに出力され、最終的に 2 番目のドロップダウン ボックスが形成されます。
$_POST['country_id'] がどこから来たのか疑問に思われるかもしれません。非常に簡単です。最初のドロップダウン ボックスの ajax 配列の「data」キーが空の場合、ドロップダウン ボックスが配置されているフォームのすべての要素の値が、ajax 経由でコントローラーに渡されます。リクエスト。 Firebug を使用している場合は、このリクエストを表示できます。
この動作は変更することもできます。デフォルトでは、Ajax 構成配列の「data」キーの値は js:jQuery(this).parents("form").serialize() です。 先頭の js: は、以下が JavaScript ステートメントでありエスケープすべきではないことを Yii に伝えます。したがって、「data」キーを「js:」で始まる別のステートメントに変更すると、独自のステートメントを入力できます。 「success」パラメータでも機能します。