/**
	 * 获取菜单Tree
	 *
	 * @return multitype:
	 */
	public function getMenuAllList() {
		$resArr = $this->getTreeChilds ( 0 );
		$arr = array ();
		$arr [0] = "作为一级菜单";
		foreach ( $resArr as $rs ) {
			$id = $rs ['id'];
			$text = $rs ['text'];
			$arr [$id] = $text;
		}
		return $arr;
	    //return $resArr = CHtml::listData ( $arr, 'id', 'text');
	}
	public function getTreeChilds($parentid) {
		$icon = array (
				'├─ ',
				'├─ ',
				'└─ '
		);
		$rs = Menu::model ()->findAll ( "parentid=:parentid", array (
				'parentid' => $parentid
		) );
		$returnArr = array ();
		if (count ( $rs ) > 0) {

			for($i = 0; $i < count ( $rs ); $i ++) {
				if ($parentid > 0) {

					$strnbsp = str_repeat ( '    ', $rs [$i] ['level'] );

					if (count($rs)==1) {
						$strnbsp .= $icon [2];
					}else{
						if ($i == 0) {
							$strnbsp .= $icon [0];
						} elseif ($i == count ( $rs ) - 1) {
							$strnbsp .= $icon [2];
						} else {
							$strnbsp .= $icon [1];
						}
					}

					$returnArr [Menu::$ii] ['id'] = $rs [$i] ['id'];
					$returnArr [Menu::$ii] ['text'] = $strnbsp. $rs [$i] ['text'];
				} else {
					$returnArr [Menu::$ii] ['id'] = $rs [$i] ['id'];
					$returnArr [Menu::$ii] ['text'] = $rs [$i] ['text'];
				}
				$childArr = $this->getTreeChilds ( $rs [$i] ['id'] );
				if (count ( $childArr ) > 0) {
					foreach ( $childArr as $child ) {
						array_push ( $returnArr, $child );
					}
				}
				Menu::$ii ++;
			}
		}
		return $returnArr;
	}
	public function beforeSave() {
		if (parent::beforeSave ()) {
			if ($this->isNewRecord) {
				$this->create_time = time ();
			}
			// 更改菜单层次
			if ($this->parentid == 0) {
				$this->level = 0;
			} else {
				$this->level = $this->parentid;
			}

			return true;
		} else {
			return false;
		}
	}

  

<div class="row">
		<?php echo $form->labelEx($model,'parentid'); ?>
		<?php echo $form->dropDownList($model,'parentid',Menu::model()->getMenuAllList(),array('encode'=>false)); ?>
		<?php echo $form->error($model,'parentid'); ?>
	</div>

db:

* @property integer $id

* @property integer $parentid

* @property string $text

* @property string $alias_name

* @property string $icon_cls

* @property integer $issort

* @property string $href

* @property string $level

* @property integer $create_time

  

yii无限极分类的更多相关文章

  1. yii框架无限极分类的做法

    用yii框架做了一个无限极分类,主要的数组转换都是粘贴的别人的代码,但还是不要脸的写出来,方便以后自己看 用的是递归,不是path路径 控制器: protected function subtree( ...

  2. php无限极分类以及递归(thinkphp)

    php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...

  3. js实现无限极分类

    转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...

  4. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制

    在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...

  5. PHP无限极分类

      当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱, ...

  6. PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂

    当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究.   到网上一搜php无限极分类,很多,但好多都是一 ...

  7. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现

    今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): /// & ...

  8. 谈一次php无限极分类的案例

    作者:白狼 出处:http://www.manks.top/php_tree_deep.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追 ...

  9. PHP无限极分类生成树方法,无限分级

    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...

随机推荐

  1. 使APP消除上方手机消息提示栏(显示WIFI,信号格那栏)消失的方法

    public void toggleFullscreen(boolean fullScreen) { // fullScreen为true时全屏,否则相反 WindowManager.LayoutPa ...

  2. Javascript的四种继承方式

    在Javascript中,所有开发者定义的类都可以作为基类,但出于安全性考虑,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击. 选定基类后,就可 ...

  3. 一个表格说明RelativeLayout中的几个重要属性【Written By KillerLegend】

      RelativeLayout中几种布局属性的说明 无 无 无 无

  4. android开源代码

    Android开源项目--分类汇总 转自:https://github.com/Trinea/android-open-project Android开源项目第一篇——个性化控件(View)篇 包括L ...

  5. "Programming"和"Programming"是同一个"Programming"吗?

    什么意思? C语言没有专门的字符串类型,但是,它同样可以处理字符串.本文不是讨论字符串的使用,而是讨论C字符串之间的关系.如题,在C语言代码中,如果定义#define STR = "Prog ...

  6. 做HDU1010 带出来一个小问题

    做1010  本来是想的DFS深搜  但是自己凭空打  打不出来  因为没有记模板  然后就去搜  但是看了一遍  自己打却又是有BUG  然后验证  就出现了一个二维字符数组打印的问题 开始代码是这 ...

  7. 行转列求和:不加 in 条件,sum的数据会不会准确?

    我的习惯写法,担心不加 in 条件 ,统计结果会包含其他的数据 SELECT ZWKMYE_KJND as 年度,ZWKMYE_KJQJ as 月份,ZWKMYE_DWBH as 单位, ' then ...

  8. 【TOP10 APP】这些应用成了AppCan千人大会的焦点

    如何评价一款APP的好坏?首先,实用性.一款好的APP,首先要能为用户所用.然后是稳定流畅.闪退.卡顿,这样的APP用起来让人抓狂.再一个,界面美观.视觉主观性,在很大程度上会影响使用情况,毕竟没有人 ...

  9. AIDL与service

    Service:Local service,一个进程中的多线程服务. AIDL:remote service,不同进程间通信. Service启动方法: startService():调用方destr ...

  10. Hadoop和大数据:60款顶级大数据开源工具

    一.Hadoop相关工具 1. Hadoop Apache的Hadoop项目已几乎与大数据划上了等号.它不断壮大起来,已成为一个完整的生态系统,众多开源工具面向高度扩展的分布式计算. 支持的操作系统: ...