我正在使用CakePHP的SmoothTranslate行为。它使用Cake的TranslateBehavior。
我有一个包含内容(“内容”)的模型。 我有翻译的字段,所以我也有一个I18n模型。
当我要按照这样的翻译字段排序时:
<?php echo $this->Paginator->sort('I18n__title.content',__('Title')); ?>
paginator组件会删除它,因为I18n__title是翻译字段的自动生成别名,而不是teh模型的别名(“Content”)。
PaginatorComponent第396行:
$ correctAlias =($ object-&gt; alias == $ alias);
$ object-&gt; alias是“Content”,但列的$别名是“I18n__title”。
PaginatorComponent的整个代码:
foreach ($options['order'] as $key => $value) {
$field = $key;
$alias = $object->alias;
if (strpos($key, '.') !== false) {
list($alias, $field) = explode('.', $key);
}
$correctAlias = ($object->alias == $alias);
if ($correctAlias && $object->hasField($field)) {
$order[$object->alias . '.' . $field] = $value;
} elseif ($correctAlias && $object->hasField($key, true)) {
$order[$field] = $value;
} elseif (isset($object->{$alias}) && $object->{$alias}->hasField($field, true)) {
$order[$alias . '.' . $field] = $value;
}
}
CakePhp 2.x可以按翻译字段排序吗?
答案 0 :(得分:2)
是的,可以做到。在控制器方法上,您应该调用paginator组件,如下所示:
$articles = $this->paginate();
您需要将其更改为类似的内容,将I18n__title.content添加到白名单参数中,如下所示:
$articles = $this->paginate(null, array(), array('I18n__title.content', ... other fields you wanna sort must also be added));
这样就可以避免在查询中删除它作为模型中的非识别字段(检查PaginatorComponent上的validateSort方法)