在thinkphp中 遍曆出資料庫的資料顯示到模板中,
資料庫
CREATE TABLE `cn_menu` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '系統功能表id', `pid` int(10) unsigned DEFAULT NULL COMMENT '父級id', `name` varchar(200) DEFAULT NULL COMMENT '菜單名稱', `url` varchar(200) DEFAULT NULL COMMENT '菜單URL', `params` varchar(200) DEFAULT NULL COMMENT 'URL參數', `sort` tinyint(4) DEFAULT '1' COMMENT '排序', `status` tinyint(1) DEFAULT '1' COMMENT '菜單狀態(1=顯示,2=隱藏,0=刪除)', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COMMENT='系統功能表表';
這是資料庫的資料
這個是菜單顯示圖
這個是模板 代碼 但是!這個模板的資料我不要死得,要根據資料庫的資料遍曆出來的
1、首先遍曆出資料,資料不能是死的,要根據資料庫的資料迴圈出來
2、滑鼠點擊一下,就隱藏他的下級, 比如:我點擊系統功能表,那麼 系統功能表下面的菜單列表和添加菜單都(隱藏)收合來!再點擊一次菜單列表和添加菜單 顯示出來
3、試過很多方法都不管用,新入門的菜鳥求指教,萬分感激!!滿分奉上
回複討論(解決方案)
根據pid從資料庫取值,至於滑鼠點擊一下,就隱藏他的下級,這屬於前端了,js,或jquery實現
根據pid從資料庫取值,至於滑鼠點擊一下,就隱藏他的下級,這屬於前端了,js,或jquery實現
可是代碼怎麼實現
用sql遍曆出資料,然後用兩個for迴圈嵌套,第一個for迴圈顯示pid=0的
系統功能表 第二個for迴圈顯示pid=1,2,3,...的
菜單列表 Ps:提供個思路,如有不對勿噴!
首先在後台中將pid==0的節點找出來組成數組arr_node,然後foreach該數組,將pid==id的子數組找出來存放在之前數組中,記key為son_node,即arrnode['son_node']=array(...)。
然後在前台遍曆輸出,
{$vo.name}
搞個 二維數組就可以啦
php無限極分類技術,自行百度。
推薦你去慕課網看看搜搜你會有很大的收穫!!!
求給分!!!
我不能給你代碼,但我可以給你指條路!
先建立個擷取資料並將其轉換成樹型結構的遞迴函式,這個函數可以放到公眾目錄的函數檔案中
function getTree($data,$pid){ if (!is_array($data) || empty($data) ) return false; $tree = array(); foreach ($data as $k => $v) { if ($v['pid'] == $pid) { //當相等時,說明此數組為上個數組的子目錄 $v['pid'] = getTree($data,$v['id']);//將子數組的內容遍曆後賦給上級數組的pid鍵,html頁面上迴圈時用到此內容 $tree[] = $v; unset($data[$k]); //刪除遍曆過的數組資料 } } return $tree;}
在控制器裡建個方法,調用資料,並傳到函數裡
public function showMenu(){$m = M('cn_menu')->field(true)->select();$d = getTree($m,0);$this->assign('menu',$d);}
HTML頁面顯示內容,
整體原理就是,通過遞迴函式迴圈遍曆多維陣列,產生有對應關係的樹型數組,代碼全手寫,有部分參考別人的,剛好我也在用這塊的內容,給你看看