ThinkPHP无限极分类

因项目需要用到无限极分类,同时也才接触TP没多久,就把TP官方里别人的分享整理了下,记录下来以便以后用到

第一步:增加扩展配置

打开配置文件conf.php,添加

'LOAD_EXT_CONFIG' => 'tool', // 加载扩展配置文件,关于扩展配置可以查阅开发手册《3.8 扩展配置》

第二步:创建tool.php,并添加以下代码

class Tool {
	static public $treeList = array();
	//存放无限分类结果如果一页面有多个无限分类可以使用 Tool::$treeList = array(); 清空
	/**
	 * 无限级分类
	 * @access public 
	 * @param Array $data     //数据库里获取的结果集 
	 * @param Int $pid             
	 * @param Int $count       //第几级分类
	 * @return Array $treeList   
	 */
	static public function columnTree(&$data,$pid = 0,$count = 1){
		foreach ($data as $key => $value){
			if($value['ColumnRela']==$pid){
				$value['Count'] = $count;
				self::$treeList []=$value;
				unset($data[$key]);
				self::columnTree($data,$value['ID'],$count+1);
			}
		}
		return self::$treeList ;
	}
}

第三步:控制器中调用

public function index(){
	$Column = M("Column");
	$result=$Column->order("ColumnRela asc,ColumnSort desc,ID desc")->select();
	$this->assign("column",Tool::columnTree($result));
	$this->display();
}

第四步:模板输出(也可以使用volist输出)

<foreach name="column" item="vo">
	<for start="1" end="$vo.Count"><php>$Spaces.="|----";</php></for>
	<if condition="$vo.ColumnLevel gt 1 ">
		<php>$Spaces = $Spaces.$vo['ColumnName'];</php>
	<else />
		<php>$Spaces = $vo['ColumnName'];</php>
	</if>
	<tr>
		<td style="text-align:left;"><{$Spaces}></td>
	</tr>
	<php>unset($Spaces);</php>
</foreach>

注释:

$treeList[] 保存排序的结果,基本就是进行了一次排序,保存后就可以 unset($data[$key]);掉,因为已经使用不到了

&$data 使用按地址传参,结合unset($data[$key]); 减少循环次数,这样效率提高了好几倍,但需要对 ColumnRela 进行 ASC的排序不然会显示不完全

$value['Count'] = $count; 为当前的等级在模板里会通过等级进行生成树形结构

参数说明:

ID		分类ID
ColumnName	类别名称
ColumnRela	父类ID
ColumnSort	分类
ColumnLevel	分类级别



转载于:https://my.oschina.net/kangweb/blog/1635428

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值