使用Agile Toolkit进行递归树渲染

时间:2011-08-30 22:11:01

标签: php recursion atk4

我有以下情况。我有一个具有以下属性的模型A: id int name varchar(255) parent_id int(引用相同的模型A)。

现在,我需要使用ModelA渲染树视图。当然,我可以加载所有数据,通过parent_id正确排序,并使用传统的字符串粘贴“渲染”。 e.g。

class Model_A extends Model_Table {
...

function render_branch($nodes, $parent){
    if (!isset($nodes[$parent])){
        return null;
    }
    $out = "<ul>";
    foreach ($nodes[$parent] as $node){
        $out .= "<li>" . $node["name"];
        $out .= $this->render_branch($nodes, $node["id"]);
        $out .= "</li>";
    }
    return $out;
}

function init(){
    parent::init();
    $nodes = array(); // preload from db and arrange so that key = parent and content is array of childs
    $this->template->set("tree", $this->render_branch($nodes, 0));
}

}

现在,我想使用atk4 native lister / smlite模板解析器来实现此目的。但是,如果你试图这样做,那么你最终会遇到讨厌的lister,在格式行中,你无论如何都会尝试用其他lister的输出替换特定标记,实际上你必须破坏运行时内存溢出

有什么建议吗?

P.S。 以上代码未经过测试,只显示概念

谢谢!

2 个答案:

答案 0 :(得分:3)

好的,正确的时间到了,并且已经创建了适当的附加组件。要使用它,请将您的添加内容和atk4更新,并按照本文了解如何操作。

http://www.ambienttech.lv/blog/2012-07-06/tree_view_in_agile_toolkit.html

答案 1 :(得分:0)

根据Jancha的评论

  好吧,在花了一些时间查看可能的选项之后,我发现了   在这个特殊情况下最简单的方法就是使用上面提到的例子。   使其更加原生的唯一方法是使用外部模板   节点并使用smite和clone region + render将html移到t o之外   模板。除此之外,似乎没有使用传统的列表   足够高效。所以,atk4家伙,跟进查询树视图   插件并创建适当的后端!它会很酷。感谢,J