To use this widget is more easy to use but with the multiple selections of CJuiAutoComplete maybe you should have to implements more javascript functions.
Let's take a look how to make CJuiAutoComplete with multiple selection enabled. Assume you have code in the article in views article /protected/views/article/_form.php. And I have table with just only 2 fields : id_tag and name
<div class="row">
<?php echo CHtml::script("
function split(val) {
return val.split(/,\s*/);
}
function extractLast(term) {
return split(term).pop();
}
")?>
<?php $this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'model'=>$model,
'attribute'=>'tag',
'source'=>"js:function(request, response) {
$.getJSON('".$this->createUrl('suggest')."', {
term: extractLast(request.term)
}, response);
}",
'options'=>array(
'delay'=>300,
'minLength'=>2,
'showAnim'=>'fold',
'select'=>"js:function(event, ui) {
var terms = split(this.value);
// remove the current input
terms.pop();
// add the selected item
terms.push( ui.item.value );
// add placeholder to get the comma-and-space at the end
terms.push('');
this.value = terms.join(', ');
return false;
}"
),
'htmlOptions'=>array(
'size'=>'40'
),
));?>
<?php echo $form->labelEx($model,'tag'); ?>
<?php echo $form->hiddenField($model,'tag',array('rows'=>6, 'cols'=>50)); ?>
<?php echo $form->error($model,'tag'); ?>
</div>
and then the action in your /protected/controller/ArticleController.php the sample of action code :public function actionSuggest(){
if (Yii::app()->request->isAjaxRequest && isset($_GET['term'])) {
$models = Tag::model()->suggestTag($_GET['term']);
$result = array();
foreach ($models as $m)
$result[] = array(
'label' => $m->name,
'value' => $m->name,
'id' => $m->id_tag,
);
echo CJSON::encode($result);
}
}
Don't forget to add rules to suggest in the rules()..And then the code in the /protected/models/ Tag.php
public function suggestTag($keyword){
$tags=$this->findAll(array(
'condition'=>'nama LIKE :keyword',
'params'=>array(
':keyword'=>'%'.strtr($keyword,array('%'=>'\%', '_'=>'\_', '\\'=>'\\\\')).'%',
)
));
return $tags;
}
That's the sample of using CJuiAutoComplete
Thanks alot. I've been trying to get this thing working and I did, thanks to you. Great man!
ReplyDeleteVery thank you! It works.
ReplyDeleteDude. This saved my cookies. Thank you for posting it!
ReplyDelete