我试图创建一个需要翻译的类别列表,并将它们显示为树结构。但到目前为止没有运气,我得到树结构,但是当我创建新的类别时,它会增加到树但不会显示名称,因为它被翻译为i18n并存储在不同的表中......
$ categories_list = $ this-> Categories-> find(' treeList') - > toArray();
这个var存储了它自己的树,其名称在Categories Table ...
中$ categories_list = $ this-> Categories-> find(' translations') - > toArray();
这个给了我实际翻译的类别,任何人都知道如何组合它们,CakePhp3对我来说是一个新事物,我无法找到关于将这两种行为结合起来的大量文档。
答案 0 :(得分:0)
为了使翻译后的字段进入树形列表,您需要将TranslateTrait添加到Category实体中,它应如下所示:
Link to CookBook关于翻译行为和TranslateTrait
/src/Model/Entity/Category.php
<?php
namespace App\Model\Entity;
use Cake\ORM\Behavior\Translate\TranslateTrait;
use Cake\ORM\Entity;
class Category extends Entity{
use TranslateTrait;
//translation field must be accessible
protected $_accessible = [
'translations' => true,
];
}
然后,您应该堆叠多种查找器方法以实现目标,一种是针对翻译行为,另一种是针对树的行为
Link to CookBook关于如何堆叠多个查找器方法
/src/Controller/ArticlesController.php
use Cake\I18n\I18n;
public function foo(){
/***
*
* 1) use translation finder
* 2) use treeList finder
* 3) give to treeList finder the translated value to use in the output array as valuePath param
*
***/
$tree_list = $this->Articles->Categories
->find('translations')
->find('treeList', ['valuePath' => '_translations.' . I18n::getLocale() . '.title'])
->toArray();
}
您可以保留 I18n :: getLocale(),以自动获取当前语言的树列表或将其替换为您喜欢的语言。