【发布时间】:2012-09-09 19:44:33
【问题描述】:
我遇到以下情况:
包含邮政编码字段和城市字段的表单。
我想在邮政编码字段上自动完成,因此当用户输入例如 1000 时,自动完成值将显示“1000 - 布鲁塞尔”。选择此值后,邮政编码字段将填写 1000,而城市字段将填写布鲁塞尔。
邮政编码、城市和连接信息将来自 mysql 数据库:
我的自动完成功能仅适用于邮政编码,但不知道如何实现所描述的效果(= 填充第二个字段)。
当前表单代码:
<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() 但它只返回第一列?
有什么提示吗?
另外,还有一个问题,我希望控制器操作的链接是动态的。如果用户在之前的 Country 下拉列表中选择了比利时,则应调用“BeCity/GetBelgianPostalCodes”。如果是法国,应该是“FrCity/GetFrenchPostalCodes”。这可能吗?如何实现?
谢谢
【问题讨论】:
-
我们可以查看您的 CJuiAutoComplete 小部件的代码吗?
-
添加了额外的代码。抱歉,我昨天晚上发布了最初的问题,但我有点着急,所以它“又快又脏”:-) 希望现在更清楚
标签: php jquery-ui autocomplete yii jquery-autocomplete