Yii:自定义 CAutoComplete 的结果

Posted

技术标签:

【中文标题】Yii:自定义 CAutoComplete 的结果【英文标题】:Yii: Customize the results of CAutoComplete 【发布时间】:2010-12-27 18:11:58 【问题描述】:

我需要使用 CAutoComplete 创建一个下拉列表。一切都设置好了,工作正常,这是我的操作代码:

<?php
    public function actionSuggestCharacter() 
        if(Yii::app()->request->isAjaxRequest && isset($_GET['q'])) 
            $name = $_GET['q']; 
            $criteria = new CDbCriteria;
            $criteria->condition='`Character` LIKE :keyword';
            $criteria->params=array(':keyword'=>"$name%");
            $criteria->limit = 5;
            $suggestions = zCharacter::model()->findAll($criteria);
            $returnVal = '';
            foreach($suggestions as $suggestion) 
                $returnVal .= $suggestion->Character."\n";
            
            if (isset($suggestion)) 
                echo $returnVal;
            
            $criteria->condition='`Character` LIKE :keyword';
            $criteria->params=array(':keyword'=>"%$name%");
            $criteria->limit = 5;
            $suggestions = zCharacter::model()->findAll($criteria);
            $returnVal = '';
            foreach($suggestions as $suggestion) 
                $returnVal .= $suggestion->Character."\n";
            
            if (isset($suggestion)) 
                echo $returnVal;
            
        
    
?>

此代码的作用是显示前 5 个匹配项与开头的关键字匹配,接下来的 5 个匹配项与关键字在任何位置匹配。

示例。假设用户在输入字段“pdd”中输入(无关紧要,可以是任何文本),因此自动完成返回的结果将如下所示:

1. pddtext...
2. pddtext...
3. pdd_some_other_text
4. pdd_text
5. pdd_text
1. text_text_pdd
2. text_pdd_text
3. etc...

问题是我需要用某种线分隔这两个块(&lt;hr&gt;&lt;div&gt; 带边框)。我该怎么做?

谢谢。

【问题讨论】:

您尝试使用标记而不是 CSS 的任何充分理由? 关于如何使用 CSS 做的任何好的建议? :-) 【参考方案1】:

你不能这样做吗?

<?php
    public function actionSuggestCharacter() 
        if(Yii::app()->request->isAjaxRequest && isset($_GET['q'])) 
            ...
            if (isset($suggestion)) 
                echo $returnVal;
            
            echo "Hey this is the delimiter\n";
            $criteria->condition='`Character` LIKE :keyword';
            ....
        
    
?>

然后在客户端检查这个字符串,当你遇到 ""Hey this is the delimiter" 时用你的分隔符替换它。

【讨论】:

以上是关于Yii:自定义 CAutoComplete 的结果的主要内容,如果未能解决你的问题,请参考以下文章

Yii,自定义用户验证,使用外部框架 API

Yii:如何自定义 CHtml 渲染的视图?

Yii2 文件下载使用自定义组件

[Yii2.0] 以Yii 2.0风格加载自定义类或命名空间 [配置使用Yii2 autoloader]

Yii中如何自定义URL?

在 yii2 中自定义网格视图