如何使用cakephp 2在视图中显示树视图

How to display treeview in view using cakephp 2

enter image description here大家好,我在 cakephp 2 中显示树视图时遇到问题...使用与 parents 相同的 table 和 child 作为关系。

Table 媒体目录

id Title Parent_id
1 Test 1 null
2 Test 2 null
3 Test 3 1
4 Test 4 1
5 Test 5 3
6 Test 6 2
7 Test 7 2

ContentsController.php

public function index()
{
    $Treeview = $this->MediaDirectory->find("all", 
        array(
            'conditions' => array(
                'MediaDirectory.parent_id' => null
            )
        )
    );
    
    $this->set(compact('$Treeview'));
}

首先我不明白你的 table 中怎么会有 2 次名为 parent_id 的字段。您应该删除为空的那个。 您的 table 中需要 3 个不同的字段:

  • parent_id存储父对象的id。
  • lft存储当前行的lft值。
  • rght 存储当前行的右值。

然后您需要在您的模型中添加以下行:

public $actsAs = array('Tree');

如果你想让它工作,你必须使用你的控制器插入你的数据。当你在其中保存一些数据时,lft 和 rght 由内核自动定义。

例如,在您的控制器中

$data['MediaDirectory']['parent_id'] = 10;
$data['MediaDirectory']['title'] = 'Test 1';
$this->MediaDirectory->save($data);

之后,您应该像这样替换控制器中的代码:

public function index() {
  $Treeview = $this->MediaDirectory->find("threaded", 
    array(
      'conditions' => array(
        'MediaDirectory.parent_id'=> null,
        'MediaDirectory.fk_id'=> $cid // Not sure what this is suppose to do
      )
    )
  );
  $this->set(compact('Treeview')); // TreeviewChild name was wrong
}

查询构建 find("threaded") 假设 return 树数据。不要犹豫,使用 debug() 函数来可视化您当前正在操作的数据。

版本 2.x 应有尽有:https://book.cakephp.org/2/en/core-libraries/behaviors/tree.html