2012-10-07 161 views
0

IM JSON建设画廊应用程序,我需要它是在树格式,使用jstree扩展IM打造它,我需要的JSON是这种格式:生成树状结构的数据库

$(function() { 
    $("#demo1").jstree({ 
     "json_data" : { 
      "data" : [ 
       { 
        "data" : "A node", 
        "metadata" : { id : 23 }, 
        "children" : [ "Child 1", "A Child 2" ] 
       }, 
       { 
        "attr" : { "id" : "li.node.id1" }, 
        "data" : { 
         "title" : "Long format demo", 
         "attr" : { "href" : "#" } 
        } 
       } 
      ] 
     }, 
     "plugins" : [ "themes", "json_data", "ui" ] 
    }).bind("select_node.jstree", function (e, data) { alert(data.rslt.obj.data("id")); }); 
}); 

和IM使用这个数据库:

的categorys: ID 名 id_father

产品: ID 名 价格 CATEGORY_ID

请使用我的项目的MVC结构,帮助我的家伙,> _ <,即时通讯和可能做这样的事情的foreach(modelinstance为模型)......

的帮助,我真的需要它我不知道怎样建设

回答

2

这是我使用的功能,你会在你的模型需要CNestedSetBehavior不过,我建议设立hierarquical数据的这种方式,因为它是更快检索:

protected function formatJstree(){ 
     $categories = $this->descendants()->findAll(); 
     $level=0; 
     $parent = 0; 
     $data = array(); 
     foreach($categories as $n => $category) 
     { 
      $node = array(
       'data'=> "{$category->title}", 
       'attr'=>array('id'=>"category_id_{$category->category_id}") 
      ); 
      if($category->level == $level){ 
       $data[$parent]["children"][] = $node; 
      } 
      else if($level != 0 && $category->level > $level){ 
       if(!isset($data[$n]["children"])){ 
        $data[$n]["children"] = array(); 
       } 
       $data[$parent]["children"][] = $node; 
      } 
      else 
      { 
       $data[] = $node; 
       $parent = $n; 
      } 
      $level=$category->level; 

     } 
     return $data; 

    }