如何在cakephp中对generateTreeList()方法的结果进行分页?

时间:2014-06-01 13:39:51

标签: php cakephp tree pagination cakephp-2.0

我的数据库中有一个Categories表,它有lft,rght和parent_id列,用于在Cakephp中使用Tree行为。 问题是如何对generateTreeList()方法的结果进行分页?

我不能用这个: 我想分页

      $categories = $this->Category->generateTreeList(null,null,null,'_');
      $this->set('categories', $categories);

我还尝试使用线程类型的查找方法来检索数据并使用一些递归辅助函数来生成树数据

function CategoryRecTable($resultOfFindThread, $i = null) {
        $i = $i . '-';
        if (count($array)) {
            foreach ($resultOfFindThread as $vals) {
                echo "<tr>
                <td><font color=\"#CCCCCC\">" . $i . "</font>" . $vals['Category']['category'] . "</td>
                <td>" . 
                $this->Html->link('down' , array('admin' => false, 'controller' => 'categories', 'action' => 'movedown', $vals['Category']['id'])) . " - " . 
                $this->Html->link('up', array('admin' => false, 'controller' => 'categories', 'action' => 'moveup', $vals['Category']['id'])) . "</td>
                <td>Page</td>
                <td>" .  $vals['Category']['category'] . "</td>
                <td>" . $vals['Category']['id'] . "</td>
                <td>" . $this->Html->Link('Edit', array('controller' => 'ategories', 'action' => 'edit', $vals['Category']['id'])) . "</td>
                <td>" . $this->Html->Link(
                        'Delete',
                        array('admin' => true, 'action' => 'delete', $vals['Category']['id']),
                        array('confirm' => 'Are you sure?')) . "</td></tr>\n"; 
                if (count($vals['children'])) {
                    $this->CategoryRecTable($vals['children'], $i);
                }
                echo "\n";
            }
            echo "\n";
        }
    }

但我的问题也存在,如何在Cakephp中对这些数据进行分页。 有人可以帮帮我吗? 非常感谢

2 个答案:

答案 0 :(得分:0)

我不确定这是否可行,因为generateTreeList不包括LIMIT的参数。可能有一种方法可以通过扩展Tree行为来破解它,但这不是我建议用于可用性和生产力目的。

相反,我会使用像jsTree这样的库:http://www.jstree.com/

通过使用ajax加载子树,您可以获得与分页相同的性能提升。它更直观,适用于一页。

此样式界面还允许您重新排列类别树。例如,它将允许您实现功能将子类别移动到顶级类别,反之亦然。

这个解决方案比生成树列表上的黑客分页更容易实现。

答案 1 :(得分:0)

使用

在lft字段上输入和订购
$this->Paginator->settings = array('order'=>'Category.lft');

然后您可以使用 $ this-&gt; Category-&gt; formatTreeList 来更改间隔版本的类别名称。