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

数据库结构:

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. Json 数组排序

    /*********************************************Json 数组排序 ******************************************** ...

  2. easy ui tabs 顶部绑定事件

    $(function(){     $('#tb').tabs('bindclick', function(index, title){     }); }); $.extend($.fn.tabs. ...

  3. jquery的插件机制

    jQuery的内核; (function( window, undefined ) { //这就是jQuery的原型 var jQuery = function( selector, context ...

  4. 项目规范和建立-从frozenui学习

    1.分支branches开发新功能,主干trunk是稳定发布的.因为frozenui下载完,看到branches比trunk多了一个版本 2.版本号定义,主版本.次版本.修订号 大版本号: 主版本号: ...

  5. [转]EJS入门

    今天学习了EJS,转个再点个赞,动态创网页的好方法! 主页:http://www.embeddedjs.com/ 转自:http://www.csser.com/board/4fddc4f0b28ed ...

  6. c# .net使用SqlDataReader注意的几点

    转自:http://blog.knowsky.com/258608.htm 1.当SqlDataReader没有关闭之前,数据库连接会一直保持open状态,所以在使用SqlDataReader时,使用 ...

  7. Servlet的一些API使用介绍

    final String rootPath = getServletConfig().getServletContext().getRealPath("/");  获取项目运行的根 ...

  8. docker安装caffe

    [最近一直想要学习caffe,但是苦苦纠结于环境安装不上,真的是第一步都迈不出去,还好有docker的存在!下面,对本人如何利用docker安装caffe做以简单叙述,不属于教程,只是记录自己都做了什 ...

  9. 运行avalon.define()发生的事情

      avalon.define = function(id, factory) { var $id = id.$id || id if (!$id) { log("warning: vm必须 ...

  10. Spring 使用外部部署文件

    1.导入属性文件: <context:property-placeholder location="classpath:db.properties"/> 2.使用外部化 ...