bubifengyun 2016-02-07 10:34:47 5523次浏览 2条评论 1 1 0

网站开发接近尾声,几乎所有的编码都是采用utf8编码,但是最后在采用gridview显示人名,并排序的时候出现问题了。不是按照拼音或者笔画啊,乱七八糟的排序。也百度了应当采用gbk的方式才可以正确排序,也知道怎么加这个转换gbk的语句,但是在gridview点击行首排序咋个处理呢?
先谢谢啦。

非常感谢 下面是我的解决方法。

参考网址:

考虑到一般编程代码以及MySQL存储都会采用UTF-8编码,但是遇到人名排序等问题时,发现不是按姓名也不是按笔画数目排序。
这跟UTF-8汉语字符的编码有关系,采用GBK编码,常用汉字一般都是按照汉语拼音顺序排列的。

下面假设在gridview里对名字等进行汉语拼音排序,是在对SearchModel进行操作。
假设有个数据库表tb_personinfo,使用Gii生成的两个ActiveRecord类,在./common/models/文件夹下,有
Personinfo.phpPersoninfoSearch.php文件。修改PersoninfoSearch.php文件。
代码如下。

class PersoninfoSearch extends Personinfo
{

    public function search($params)
    {
        $query = Personinfo::find();

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

        // usage
        $this->sortByPinyin($dataProvider, [
            'name',
        ]);
        
        // skip many codes.

    
    }

    /**
     * sort params in attributes by Pinyin
     * @params $params attribute name, as array
     */
    public function sortByPinyin($dataProvider, $params)
    {
        $sorts = $dataProvider->getSort();
        foreach($params as $param){
            $sorts->attributes[$param] = [
                'asc' => ["CONVERT($param USING gbk)" => SORT_ASC],
                'desc' => ["CONVERT($param USING gbk)" => SORT_DESC],
            ];
        }
        $dataProvider->setSort($sorts);
    }
}

解释:

  • sortByPinyin($dataProvider, $params)函数,是这次添加的一个函数,$params是个数组array,
    把需要通过汉语排序的属性名字作为元素罗列其中。
  • search($params)是已有函数,本文只是对其添加下面这一条代码,用于汉语拼音排序。
$this->sortByPinyin($dataProvider, [
            'name',
        ]);
觉得很赞
  • 评论于 2016-03-21 23:11 举报
    public function sortByPinyin($dataProvider, $params)
        {
            $sorts = $dataProvider->getSort();
            foreach($params as $param){
                $sorts->attributes[$param] = [
                    'asc' => ["CONVERT($param USING gbk)" => SORT_ASC],
                    'desc' => ["CONVERT($param USING gbk)" => SORT_DESC],
                ];
            }
            $dataProvider->setSort($sorts);
        }
    
    1 条回复
    评论于 2016-03-22 07:16 回复

    你想表达啥意思?

  • 评论于 2016-03-21 23:17 举报
    function function_name() {
        echo 'hello world';
    }
    
您需要登录后才可以评论。登录 | 立即注册