thinkphp 關於遍曆菜單的問題

來源:互聯網
上載者:User
在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}


    • {$son.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頁面顯示內容,

                    
     
    • {$vo.name}
      • {$vi.name}


    整體原理就是,通過遞迴函式迴圈遍曆多維陣列,產生有對應關係的樹型數組,代碼全手寫,有部分參考別人的,剛好我也在用這塊的內容,給你看看
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.