[置顶] 递归 加引用 实现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技术博客网站生成 说明: 首先,你需要注册一 ...
随机推荐
- ASP.NET服务器控件对应的HTML标签
了解ASP.NET的控件最终解析成什么HTML代码,有助于我们对ASP.NET更深的了解,在使用JS交互时也知道如何操作. ASP.NET 服务器控件渲染到客户端之后对应的HTML标签讲解. labe ...
- HDU 5874 Friends and Enemies
Friends and Enemies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- redis配置实例及redis.conf详细说明
一.配置实例 1.redis修改持久化路径.日志路径.清缓存 redis修改持久化路径和日志路径 vim redis.conf logfile /data/redis_cache/logs/redi ...
- lightoj 1024 (高精度乘单精度)
题意:给你一些数,求它们的最小公倍数,结果可能会很大. 统计出每个素因子出现的最大次数,把他们相乘即可,需要高精度. #include<cmath> #include<cstdio& ...
- 完全参照系统自带的DatePickerDialog、TimePickerDialog的源代码仿写的DateTimePickerDialog
完全参照系统自带的DatePickerDialog.TimePickerDialog的源代码仿写的DateTimePickerDialog.具有同时选择日期.时间的功能.在2.2.2.3平台,显示的效 ...
- sys.check_constraints
每个用作 CHECK 约束(sys.objects.type = C)的对象都在表中占一行. SELECT name FROM sys.check_constraints -- equal to SE ...
- linux下开发c++第二弹--helloworld与makefile
一:hello world sudo vim hello.cpp 输入 g++ -o hello hello.cpp 获得hello 输入 ./hello 运行,显示结果hello world! ...
- vector 的resize与reserve
最近遇到一个坑,简单说来是resize与reserve的功能混淆了. 如下: 如果调用resize的化,编译会出错,如果给Text提供默认构造函数,则可以编译通过,最终输出的结果为10. 如果调用re ...
- thymeleaf条件表达式
条件表达式形式:condition, then and else <tr th:class="${row.even}? 'even' : 'odd'"> ... < ...
- MongoDB Windows 下安装部署
下面主要是我在Windows上(Win7)安装.运行.安装Windows服务的笔记,以作备忘. 1.下载 下载地址:http://www.mongodb.org/downloads 从其下载页面就可以 ...