<?php class k_model_menu_menu { private $data = array(); private $rdata = array(); private $jdata = array(); private $level = 0; private $paret = array(); function getOption($type= 'part',$pid = 0) { if($type = 'all') $this->data= R::getAll( 'select * from menu' ); $this->teamData(); if($this->rdata) return $this->rdata; return false; } function addMenu($data){ foreach($data as $key =>$value){ if($value == '請填寫內容!') $data[$key]=''; } if($data){ $menu = R::dispense('menu'); $menu->pid = $data['pid']; $menu->name = $data['name']; $menu->url = $data['url']; $menu->icon = $data['icon']; $id = R::store($menu); return $id; } } //返回json 字符串 public function getJsonMenu(){ $data = $this->getChild(1); $this->jdata = $data; $this->recursive($this->jdata); return json_encode($this->jdata); } //遞歸函數 實現不斷的生成子節點,用了引用,感覺這引用是如來神筆,要不然實現太復雜了 public function recursive(&$data = array()){ foreach($data as $key =>$value){ $data[$key]['children']= $this->getChild($value['id']); $tmp = &$data[$key]['children']; if($tmp){ $this->recursive($tmp); } } } //組織數據,用於生成樹形的select 返回的是一個數組 //數組的形式是 public function teamData($pid=1){ foreach ($this->data as $key => $value) { if($value['pid']==$pid){ $this->level++; array_push($this->rdata, array('name'=>$value['name'],'level'=>$this->level,'id'=>$value['id'])); $tmpdata = $this->teamData($value['id']); if(!$tmpdata){ $this->level--; continue; } } } } //根據pid拿取下面的子數據 public function getChild($pid){ $data= R::getAll( "select * from menu where pid = {$pid}" ); $tmpdata = array(); if($data){ foreach ($data as $key => $value) { $tmpdata[$key]['id'] = $value['id']; $tmpdata[$key]['icon'] = $value['icon']; $tmpdata[$key]['text'] = $value['name']; $tmpdata[$key]['url'] = $value['url']; $tmpdata[$key]['children'] = array(); } } return $tmpdata; } }