用递归方法实现多级分类,适合分级不太多的分类,如三到四级。

数据库结构:

Model中(Category.php)

    /**
* 获取全部分类信息
*/
public function getAllcategory()
{
$sql = 'select * from '.$this->tableName().' order by id asc';
$category = ZDBTool::QueryAll($sql); return $category;
}

Controller中(CategoryController.php)

    public function actionIndex()
{
global $category;
$category = array(); $category = Category::model()->getAllCategory();
//print_r($category); //……其它内容省略 $param = array(
'model' => $model,
'cat_arr' => $cat_arr,
);
$this->render('index', $param);
} //无限分类递归数组
public function get_cat_array($pid = 0)
{
//echo 'fid:'.$fid.' ';
global $category;
$arr = array();
foreach($category as $index => $row){
//对每个分类进行循环。
if($category[$index]['pid'] == $pid){ //如果有子类
$row['child'] = $this->get_cat_array($category[$index]['id']); //调用函数,传入参数,继续查询下级
$arr[] = $row; //组合数组
}
}
return $arr;
}

View中(category/index.tpl)(本文只演示到三级分类,此处使用了Yii的smarty-view-renderer扩展

    <div class="main">
<div class="category">
<form action="/category/create" method="post">
<table class="table table-hover">
<thead>
<tr>
<th style="width:10px;"></th>
<th>分类名称</th>
<th style="width:80px;">操作</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td colspan="4" class="border_btm" style="padding-top:15px;">
<a href="{$this->createUrl('category/create')}"><i class="icon-plus-sign-alt">+</i> 添加新分类</a>
</td>
</tr>
{foreach from=$cat_arr key=k item=v}
<tr>
<td>{if !empty($v.child)}<a href="javascript:;"><i class="icon-chevron-down"></i></a>{/if}</td>
<td>
<div class="type-parent">{$v.title}&nbsp;&nbsp;
{if empty($row['pid'])}<a href="{$this->createUrl('category/create', ['pid'=>$v.id])}"><i class="icon-plus-sign-alt">+</i> 添加子分类</a>{/if}
</div>
</td>
<td>
<a href="{$this->createUrl('category/update', ['id'=>$v.id])}">编辑</a>&nbsp;&nbsp;
<a href="{$this->createUrl('category/delete', ['id'=>$v.id])}"
onclick="return confirm('确认删除此分类吗?');return false;">删除</a>
</td>
</tr>
{foreach from=$v.child key=k1 item=v1}
<tr>
<td>{if !empty($v1.child)}<a href="javascript:;"><i class="icon-chevron-down"></i></a>{/if}</td>
<td>
<div class="type-child">{$v1.title}&nbsp;&nbsp;{if $v1.pid!=0}
<a href="{$this->createUrl('category/create', ['pid'=>$v1.id])}">
<i class="icon-plus-sign-alt">+</i> 添加子分类</a>{/if}</div>
</td>
<td>
<a href="{$this->createUrl('category/update', ['id'=>$v1.id])}">编辑</a>&nbsp;&nbsp;
<a href="{$this->createUrl('category/delete', ['id'=>$v1.id])}"
onclick="return confirm('确认删除此分类吗?');return false;">删除</a>
</td>
</tr>
{foreach from=$v1.child key=k2 item=v2}
<tr>
<td></td>
<td>
<div class="type-child-child">{$v2.title}&nbsp;&nbsp;{if $v2.pid!=0}
<a href="{$this->createUrl('category/create', ['pid'=>$v2.id])}">
<i class="icon-plus-sign-alt">+</i> 添加子分类</a>{/if}</div>
</td>
<td>
<a href="{$this->createUrl('category/update', ['id'=>$v2.id])}">编辑</a>&nbsp;&nbsp;
<a href="{$this->createUrl('category/delete', ['id'=>$v2.id])}"
onclick="return confirm('确认删除此分类吗?');return false;">删除</a>
</td>
</tr>
{/foreach}
{/foreach}
{/foreach}
<tr>
<td></td>
<td colspan="4">
<input name="submit" type="submit" class="btn button green" value="提交">
</td>
</tr>
</tbody>
</table>
</form>
</div>
</div>

CSS样式


/*Category*/
.category{padding:15px;}
.category .table td{/*font-size:16px;*/ vertical-align:middle;}
.category .table td input{margin-bottom:;}
.category .table .type-child{padding-left:55px;background:url('../../images/bg_repno.gif') no-repeat -248px -550px;}
.category .table .type-child-child{padding-left:105px;background:url('../../images/bg_repno.gif') no-repeat -248px -550px;}

附:bg_repno.gif

$cat_arr 数组结构如图:

最终效果图:

Yii中用递归方法实现无限级分类的更多相关文章

  1. (实用篇)PHP递归实现无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...

  2. PHP无限级分类-递归(不推荐)

    [http://www.helloweba.com/view-blog-204.html] 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢? ...

  3. php无限级分类

    使用递归方法,遍历子类,对数据进行重新排序,使用level进行无限级分类 /** * 功能:无限级分类 * 参数:$data 类别查询结果集 * 返回值:$arr 排序后的数组 */ public f ...

  4. PHP递归实现无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...

  5. FreeSql 使用 ToTreeList/AsTreeCte 查询无限级分类表

    关于无限级分类 第一种方案: 使用递归算法,也是使用频率最多的,大部分开源程序也是这么处理,不过一般都只用到四级分类. 这种算法的数据库结构设计最为简单.category表中一个字段id,一个字段fi ...

  6. mysql无限级分类

    第一种方案: 使用递归算法,也是使用频率最多的,大部分开源程序也是这么处理,不过一般都只用到四级分类. 这种算法的数据库结构设计最为简单.category表中一个字段id,一个字段fid(父id).这 ...

  7. PHP无限级分类的实现(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...

  8. 一道无限级分类题的 PHP 实现

    今天有网友出了道题: 给出如下的父子结构(你可以用你所用语言的类似结构来描述,第一列是父,第二列是子),将其梳理成类似如图的层次父子结构. origin = [('A112', 'A1122'), ( ...

  9. php利用递归函数实现无限级分类

    相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径.各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了. 什么是无限级分类? 无限级分类是 ...

随机推荐

  1. jquery 之事件 多库共存(noConflict)

    /*jquery 之 简单事件jquery 与其它库共存,提供了 .noConflict() 方法,用法如下<script src="jquery 库"><scr ...

  2. PHP 文字,图片水印,缩略图,裁切成小图(大小变小)

    文字水印基本思路:1.用getimagesize()获取图片的信息(as:大小,属性等):2.根据图片信息用imagecreatefromjpeg ()/imagecreatefromgif/imag ...

  3. JS分段上传文件(File)并使用MD5.js加密文件段用来后台校验

    HTML <form method="POST" name="form1" action="/mupload/upload/" enc ...

  4. 文字以及div水平垂直居中

    文字以及div水平垂直居中.md <div class=”content”> <div class=”mydiv”> huangyingnin! </div>< ...

  5. node-mongodb-native的几种连接数据库的方式

    h1,h2,h3,h4,h5,h6,p,blockquote { margin: 0; padding: 0;}body { font-family: "Helvetica Neue&quo ...

  6. 回顾javase点滴

    数据类型 8种基本数据类型和引用类型 数据类型 占用位数 存储方式 最小值 最大值 默认值 byte 8 1+7 -128(-2^7) 127(2^7-1) 0 short 16 1+15 -3276 ...

  7. C#中判断bool 类型 代码的最短写法

    看到一个关于写最短代码的,  是一个bool类型判断的:    public bool IsNull(object val) { if (val == null) { return true; } e ...

  8. PHP利器-WAMPServer

    为了配置memcacheAdmin,牵涉到搭建PHP的环境,使用的是WAMPServer,安装之后,需要对apache进行配置, 端口,需要将wamp\bin\apache\Apache2.2.21\ ...

  9. bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 曼哈顿生成树

    大致题意:统计平面上由曼哈顿距离小于等于c的点对组成联通块的个数. 曼哈顿生成树的模板题.有关讲解:http://blog.csdn.net/acm_cxlove/article/details/88 ...

  10. [Leetcode] Validate BST

    给一个Binary Tree,检查是不是Binary Search Tree. 即是否满足对每个节点,左子树的中的所有节点的值 < 当前节点的值 < 右子树所有节点的值. Solution ...