<?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;

    }

    

    

}

[置顶] 递归 加引用 实现tree 和 无限级菜单的更多相关文章

  1. [置顶] 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅

    转载请注明出处http://blog.csdn.net/xiaanming/article/details/9825113 异步加载图片的例子,网上也比较多,大部分用了HashMap<Strin ...

  2. 【置顶】Trotyl's OI tree

    \(\rm thx\):@\(\rm UntilMadow\) ! \(\color{Green}{\rm Pupil}\) :只会一点点 \(\color{blue}{\text{Expert}}\ ...

  3. [置顶] ※数据结构※→☆非线性结构(tree)☆============树结点 链式存储结构(tree node list)(十四)

    结点: 包括一个数据元素及若干个指向其它子树的分支:例如,A,B,C,D等. 在数据结构的图形表示中,对于数据集合中的每一个数据元素用中间标有元素值的方框表示,一般称之为数据结点,简称结点. 在C语言 ...

  4. [置顶] Flex中Tree组件无刷新删除节点

    在Tree组件中经常要删除某个节点,而删除之后重新刷新加载该Tree组件会影响整个操作效果和效率,因此,无刷新删除就比较好,既删除了节点也没有刷新tree,而使Tree的状态处于删除之前的状态. 无刷 ...

  5. Discuz常见小问题-如何批量加精,置顶帖子

    批量选中帖子,然后置顶和精华都可以勾选 完成之后的效果

  6. [置顶] Android开发笔记(成长轨迹)

    分类: 开发学习笔记2013-06-21 09:44 26043人阅读 评论(5) 收藏 Android开发笔记 1.控制台输出:called unimplemented OpenGL ES API ...

  7. js上移、下移、置顶、置底功能实现

    实现页面上列表内容上移.下移.置顶.置底 功能,主要实现思路是节点操作,比如说:上移,直接把点击项移动到前一个节点,以此类推,当然实际代码实现还要加些判断,如当前点击操作项是否已经是置底或置底了,如果 ...

  8. [置顶]VC2013的一个bug

    [置顶]VC2013的一个bug 前段时间在尝试使用一个C++的GUI库nana.这个库最大的特点在于使用现代C++风格去编写GUI程序,而不需要使用大量的比较丑陋的代码(如MFC中的各种宏),或者其 ...

  9. [置顶] 创建GitHub技术博客全攻略

    [置顶] 创建GitHub技术博客全攻略 分类: GitHub2014-07-12 13:10 19710人阅读 评论(21) 收藏 举报 githubio技术博客网站生成 说明: 首先,你需要注册一 ...

随机推荐

  1. Delphi中编辑word

      其他(28)   //启动Word   try     wordapplication1.connect;   except     messagedlg('word may not be ins ...

  2. FOJ 1858 Super Girl 单调队列

    http://acm.fzu.edu.cn/problem.php?pid=1858 一个数组中  找两对元素,第一对元素和最大,第二对元素和最小,限制:一对元素中两个元素的距离在原数组中小于d.去掉 ...

  3. IOS AsyncSocket

    导入AsyncSocket.h  AsyncSocket.m   AsyncUdpSocket.h   AsyncUdpSocket.m   以及  CFNetWork.framework async ...

  4. sql基本语句

    ---恢复内容开始--- 查询有几个不同的职位名称: select distinct name from a: group by: 现在有两个表product和sales,字段分别如下: TABLES ...

  5. Android FragmentActivity+viewpager的使用

    使用场景,打算设计一个“底部菜单栏+其余可滑动的页面”的简单的功能. package com.lanyuweng.mibaby; import android.content.Intent; impo ...

  6. 【九度OJ】题目1434贪心算法

    题目 本题的贪心算法策略需要深入思考一下 看到题目,最初没有理解题目的要求:看尽量多的完整的节目.尽量多是指数量多,自己理解成观看的时间最长.这样想其实简化了这道题. 正确理解题意后,首先想到的想法是 ...

  7. MFC图形图像

    一.CDC类 CDC类简介 CDC类是一个设备上下文类. CDC类提供了用来处理显示器或打印机等设备上下文的成员函数,还有处理与窗口客户区关联的显示上下文的成员函数.使用CDC的成员函数可以进行所有的 ...

  8. 《GettingThingsDone》--GTD学习笔记(二)-GTD实践指导

    一.准备阶段的建议: 高级的工作管理方法就是学会一套系统并付诸实施,直到将这套系统和方法融入你的工作和生活中. 通过行动使自己感觉良好,要比通过使自己感觉良好而进入一种较佳的行动状态容易的多. 当你在 ...

  9. ASP.NET MVC3 系列教程 – Web Pages 1.0

    http://www.cnblogs.com/highend/archive/2011/04/14/aspnet_mvc3_web_pages.html I:Web Pages 1.0中以“_”开头的 ...

  10. matplotlib绘制三维图

    本文参考官方文档:http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html 起步 新建一个matplotlib.figure.Figure对象, ...