cakephp paginator排序字段与i18n

时间:2010-11-11 20:34:58

标签: php cakephp internationalization

我已经完成了使用cakephp的应用程序,并且我按照cakephp书上的说明完成了对数据库的操作。问题是在索引视图的表上,我无法按翻译的字段进行排序。该字段实际上并不存在于数据库中,所以这里是我认为问题出现的地方,但我可以在字段上插入数据,因此i18n正常工作。

我尝试了几种设置分页器的方法,但都没有。

例如,我尝试过:

Paginator->sort('Name','name');
Paginator->sort('Name','I18n__name');
Paginator->sort('Name','I18n__name.content');

正如我所看到的,在查询中,它获取了引用它的字段为I18n__name.content',所以我认为这样可行,但事实并非如此。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

我终于找到了它。我认为这应该在cakephp开箱即用。但是在他们添加之前,有一种方法可以使它发挥作用。

在paginatro上使用表格:

Paginator->sort('Name','I18n__name.content');

然后,唯一需要做的就是在模型中添加以下功能。

function hasField($fieldName) {
    if (parent::hasField($fieldName))
        return true;
    else
        switch ($fieldName) {
            case "content":
                return true;
            default:
                return false;
        }
    return false; 
}

就是这样,现在翻译的字段可以在分页表中排序。

答案 1 :(得分:0)

我通常使用像

这样的东西
echo $this->Paginator->sort('Name', __('Content', true));

然后让__()函数在必要时呈现翻译的名称。或者我误解了这个问题?

干杯 阿诺

答案 2 :(得分:0)

在Cake 1.3.10中

只需$paginator->sort(__('test',true),'field_name');即可

翻译内容优先,数据库字段名称为第二参数。

定义如下: http://api.cakephp.org/class/paginator-helper#method-PaginatorHelpersort