Verwenden Sie das YII-Framework-Dropdown, um kaskadierende Menüs zu erstellen
Sie benötigen häufig ein Formular, kaskadierende Städte oder kaskadierende Kategorien und andere Funktionen. Es gibt zwei Dropdown-Felder, von denen eines davon abhängt Geben Sie den Wert in einem weiteren Dropdown-Feld ein. Mit der integrierten Ajax-Funktionalität von Yii können Sie ein solches Dropdown-Feld erstellen. Wie Sie dies umsetzen, wird im Folgenden gezeigt.
Das erste ist die Ansicht des Formulars. Wir zeigen ein Formular an, in dem das Land angezeigt wird, und basierend auf dem Land wird es zusammen mit der Stadt angezeigt.
ProgrammcodeProgrammcode
echo CHtml::dropDownList('country_id','', array(1=>'USA',2=>'France',3= > ;'Japan'),
array(
'ajax' => array(
'type'=>'POST', //request type
'url'=>'dynamiccities ', //URL zum Aufrufen
'update'=>'#city_id', //Selektor zum Aktualisieren
//'data'=>'js:javascript Statement'
//weglassen der Datenschlüssel zum Übergeben aller Formularwerte durch
)));
//leer, da er durch das andere Dropdown gefüllt wird
echo CHtml::dropDownList('city_id',' ' , array());
?>
Das erste Dropdown-Feld besteht aus mehreren Wert-/Namenspaaren, die Länder darstellen. . Wenn es geändert wird, wird eine Ajax-Anfrage durch die Aktion „dynamiccities“ des aktuellen Controllers abgeschlossen. Das Ergebnis der Anfrage (die Ausgabe der Aktion „dynamiccities“) wird durch das Dropdown-Feld ersetzt, dessen zweite ID #city_id ist.
Als nächstes kommt die Controller-Aktion, die HTML ausgibt, um das zweite Dropdown-Feld zu füllen. Außerdem hängt es vom Wert des ersten Dropdown-Felds ab.
Programmcode Programmcode
öffentliche Funktion actionDynamiccities()
{
$data=Location::model()->findAll('parent_id=:parent_id',
array(':parent_id'=>(int) $_POST['country_id'])); ;
foreach($data as $value=>$name)
{
Echo CHtml::tag('option',
array('value'=>$value),CHtml ::encode($name),true);
}
}
?>
Es werden alle Städte abgerufen, deren parent_id der erste Dropdown-Feldwert ist. Alle diese Städte werden dann in Labels ausgegeben und bilden letztendlich eine zweite Dropdown-Box.
Sie fragen sich vielleicht, woher $_POST['country_id'] kommt. Ganz einfach: Wenn der Schlüssel „data“ des Ajax-Arrays im ersten Dropdown-Feld leer ist, werden die Werte aller Elemente des Formulars, in dem sich das Dropdown-Feld befindet, über einen Ajax an den Controller übergeben Anfrage. Wenn Sie Firebug verwenden, können Sie diese Anfrage anzeigen.
Dieses Verhalten kann auch geändert werden. Standardmäßig ist der Wert des Schlüssels „data“ im Ajax-Konfigurationsarray js:jQuery(this).parents("form").serialize(). Das js am Anfang: sagt Yii, dass das, was folgt, eine Javascript-Anweisung ist und nicht maskiert werden sollte. Wenn Sie also den Schlüssel „data“ in eine andere Anweisung ändern, die mit „js:“ beginnt, können Sie Ihre eigene Anweisung ausfüllen. Funktioniert auch mit dem Parameter „success“.