[置顶] 递归 加引用 实现tree 和 无限级菜单
<?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 和 无限级菜单的更多相关文章
- [置顶] 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
转载请注明出处http://blog.csdn.net/xiaanming/article/details/9825113 异步加载图片的例子,网上也比较多,大部分用了HashMap<Strin ...
- 【置顶】Trotyl's OI tree
\(\rm thx\):@\(\rm UntilMadow\) ! \(\color{Green}{\rm Pupil}\) :只会一点点 \(\color{blue}{\text{Expert}}\ ...
- [置顶] ※数据结构※→☆非线性结构(tree)☆============树结点 链式存储结构(tree node list)(十四)
结点: 包括一个数据元素及若干个指向其它子树的分支:例如,A,B,C,D等. 在数据结构的图形表示中,对于数据集合中的每一个数据元素用中间标有元素值的方框表示,一般称之为数据结点,简称结点. 在C语言 ...
- [置顶] Flex中Tree组件无刷新删除节点
在Tree组件中经常要删除某个节点,而删除之后重新刷新加载该Tree组件会影响整个操作效果和效率,因此,无刷新删除就比较好,既删除了节点也没有刷新tree,而使Tree的状态处于删除之前的状态. 无刷 ...
- Discuz常见小问题-如何批量加精,置顶帖子
批量选中帖子,然后置顶和精华都可以勾选 完成之后的效果
- [置顶] Android开发笔记(成长轨迹)
分类: 开发学习笔记2013-06-21 09:44 26043人阅读 评论(5) 收藏 Android开发笔记 1.控制台输出:called unimplemented OpenGL ES API ...
- js上移、下移、置顶、置底功能实现
实现页面上列表内容上移.下移.置顶.置底 功能,主要实现思路是节点操作,比如说:上移,直接把点击项移动到前一个节点,以此类推,当然实际代码实现还要加些判断,如当前点击操作项是否已经是置底或置底了,如果 ...
- [置顶]VC2013的一个bug
[置顶]VC2013的一个bug 前段时间在尝试使用一个C++的GUI库nana.这个库最大的特点在于使用现代C++风格去编写GUI程序,而不需要使用大量的比较丑陋的代码(如MFC中的各种宏),或者其 ...
- [置顶] 创建GitHub技术博客全攻略
[置顶] 创建GitHub技术博客全攻略 分类: GitHub2014-07-12 13:10 19710人阅读 评论(21) 收藏 举报 githubio技术博客网站生成 说明: 首先,你需要注册一 ...
随机推荐
- 修复duilib库UISlider控件的4个bug
转载级请注明原出处,谢谢~· 昨天封装好一个音频类,我在为dulib做音频播放demo时发现了一些问题,由CSliderUI控件导致的,进而发现了这个控件的好几样不足,他无法满 足我们做一个播放器的进 ...
- SOA和NS区别
SOA是起始权威服务器,在该服务器上可以新增和删除记录; NS服务器是笔试哪些DNS服务器可以解析该域名; 对于一个域(如baidu.com)SOA只有一个NS可以有多个. NS服务器包含SOA,SO ...
- 安装nagios出现的两个错误记录
最近在安装nagios,出现几个错误记录: 一 检查nagios配置的时候出现错误如下: Warning: Duplicate definition found for host 'kelly' (c ...
- wireshark http过程
一直研究lighttpd源码,顺便看下网络编程,不说太多,开始吧 第一步 设置wireshark过滤规则 tcp.port eq 81 ,然后开始捕捉 第二步 http://183.61.16.16 ...
- (转载)OC学习篇之---类的定义
之前已经介绍了OC中的一个程序HelloWorld,今天我们继续学习OC中类的相关知识. OC和C的最大区别就是具有了面向对象的功能,那么说到面向对象,就不得不说类这个概念了,如果学过Java的话,那 ...
- <Araxis Merge>保存文件
1.保存文件 在任何时候都可以使用File菜单中的Save和Save As来保存文件.使用Save将修改的部分保存回文件.使用Save As将会用新名称来保存文件.在你右击文件面板的时候也可以从快捷菜 ...
- list、tuple、dict、set、map
list Python内置的一种数据类型是列表. list是一种有序的集合,可以随时添加和删除其中的元素. # 创建list classmate = ['micheal', 'Bob', 'Tracy ...
- Android强大的开源库与系统架构工具
后来加上的,因为太强大了,android上百个可立即使用的开源库介绍:https://github.com/Trinea/android-open-project 一款功能强大且实用的开发工具可以为开 ...
- homework-02,第二次作业——寻找矩阵最大子序列和
经过漫漫漫~~~~~~~~~~~~~~长的编译和调试,第二次作业终于告一段落了 先放出源码,思路后面慢慢道来 #include<stdio.h> #include<stdlib.h& ...
- C#Windows窗体界面设计_01_绘制三角函数_五点作图法
binzhouweichao@163.com Visual Stutio 2010 C#开发环境 五点作图绘制三角函数,以正弦函数为例,选取一个周期[0, 2π]上的五个特殊的点,也就是横坐标0, π ...