次の状況があります。
郵便番号のフィールドと都市のフィールドを含むフォーム。
郵便番号フィールドでオートコンプリートが必要なため、ユーザーがインスタンス 1000 を入力すると、オートコンプリート値は「1000 - ブリュッセル」と表示されます。この値を選択すると、郵便番号フィールドに 1000 が入力され、都市フィールドにブリュッセルが入力されます。
郵便番号、都市、および連結された情報は、mysql データベースから取得されます。
オートコンプリートは郵便番号のみで動作しますが、説明されている効果を実装する方法についての手がかりがありません (= 2 番目のフィールドへの入力)。
現在のフォーム コード:
<div class="row">
<?php echo $form->labelEx($model,'PostalCode'); ?>
<?php //echo $form->textField($model,'PostalCode',array('size'=>10,'maxlength'=>50));
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'name'=>'PostalCode',
'value'=>$model->PostalCode,
//'source'=>$people, // <- use this for pre-set array of values
'source'=>$this->createUrl('BeCity/GetBelgianPostalCodes'),// <- path to controller which returns dynamic data
// additional javascript options for the autocomplete plugin
'options'=>array(
'minLength'=>'1', // min chars to start search
'showAnim'=>'fold'
),
));
?>
<?php echo $form->error($model,'PostalCode'); ?>
</div>
現在のコントローラ アクション コード:
public function actionGetBelgianPostalCodes()
{
$res =array();
if (isset($_GET['term'])) {
// http://www.yiiframework.com/doc/guide/database.dao
$qtxt ="SELECT
DISTINCT
bc.PostalCode as PostalCode,
bc.NameNL as CityName,
CONCAT(bc.PostalCode, ' - ', bc.NameNL) as FullCityName
FROM be_city bc
WHERE bc.PostalCode LIKE :qterm
ORDER BY bc.PostalCode, bc.NameNL ASC";
$command =Yii::app()->db->createCommand($qtxt);
$command->bindValue(":qterm", $_GET['term'].'%', PDO::PARAM_STR);
$res =$command->queryColumn();
}
echo CJSON::encode($res);
Yii::app()->end();
}
コントローラーのアクションが完全に正しいかどうかわからない、 $command->queryAll() が機能していないように見えるので、代わりに queryColumn() を使用しますが、最初の列のみを返しますか?
ヒントはありますか?
また、追加の質問です。コントローラー アクションへのリンクを動的にしたいと思います。前の国ドロップダウンでユーザーがベルギーを選択した場合は、'BeCity/GetBelgianPostalCodes' を呼び出す必要があります。フランスの場合は、'FrCity/GetFrenchPostalCodes' に送信する必要があります。これは可能ですか?
ありがとう