php中商品无限极分类
2015-11-20 23:26
531 查看
以下代码是我从网上看视频抄下来的代码(是传智播客老师写的),以备后用。
1、在商品分类模型类中加入下面代码:
class CategoryModel extends Model {
public function getAllCategories($stop_id=0){
//组织sql
$sql="select * from {$this->getTableName()} order by c_sort asc";
//调用父类方法
$categories= $this->query($sql);
return $this->noLimitCategory($categories,0,0,$stop_id);
}
/*无限极分类
*@param1 array $categories,需要进行无限极分类的数组
*@param2 int $parent_id,当前需要查询的顶级分类的id,默认为0,表示顶级分类
*@param3 int $level 表示当前结果的级别
*@param4 int $stop_id,需要终止查询的id
*/
private function noLimitCategory($categories,$parent_id=0,$level=0,$stop_id=0){
//定义一个静态数组用于保存每次遍历的结果
static $res= array();
//遍历数组进行数据判断
foreach($categories as $value){
//判断数据的父级分类id
if($value['c_parent_id']==$parent_id){
//当分类的id不等于自己的id时进行遍历
if($value['c_id']!=$stop_id){
$value['level']=$level;
$res[]=$value;
//递归点:当前分类有可能有子分类
$this->noLimitCategory($categories,$value['c_id'],$level+1,$stop_id);
}
}
}
//返回最终的结果
return $res;
}
}
在thinkPHP模版中调用如下:
<select name="c_id" >
<option value="0">请选择分类</option>
<volist name="data" id="d">
<option value="{$d.c_id}">{:str_repeat("-",$d["level"] * 4 )}{$d.c_name}</option>
</volist>
</select>
效果如下:
1、在商品分类模型类中加入下面代码:
class CategoryModel extends Model {
public function getAllCategories($stop_id=0){
//组织sql
$sql="select * from {$this->getTableName()} order by c_sort asc";
//调用父类方法
$categories= $this->query($sql);
return $this->noLimitCategory($categories,0,0,$stop_id);
}
/*无限极分类
*@param1 array $categories,需要进行无限极分类的数组
*@param2 int $parent_id,当前需要查询的顶级分类的id,默认为0,表示顶级分类
*@param3 int $level 表示当前结果的级别
*@param4 int $stop_id,需要终止查询的id
*/
private function noLimitCategory($categories,$parent_id=0,$level=0,$stop_id=0){
//定义一个静态数组用于保存每次遍历的结果
static $res= array();
//遍历数组进行数据判断
foreach($categories as $value){
//判断数据的父级分类id
if($value['c_parent_id']==$parent_id){
//当分类的id不等于自己的id时进行遍历
if($value['c_id']!=$stop_id){
$value['level']=$level;
$res[]=$value;
//递归点:当前分类有可能有子分类
$this->noLimitCategory($categories,$value['c_id'],$level+1,$stop_id);
}
}
}
//返回最终的结果
return $res;
}
}
在thinkPHP模版中调用如下:
<select name="c_id" >
<option value="0">请选择分类</option>
<volist name="data" id="d">
<option value="{$d.c_id}">{:str_repeat("-",$d["level"] * 4 )}{$d.c_name}</option>
</volist>
</select>
效果如下:
相关文章推荐
- 当php懈垢windows通用上传缺陷
- PHP实现文件上传
- XML省市区三级联动
- 【博客开篇】服务器配置:Windows2008R2+PHP5.6+SQLServer2008(X64)
- PHP正则表达式
- PHP语法(二):数据类型、运算符和函数
- php后台“爬虫”模拟登录第三方系统(二)---正则表达式的介绍
- 一步一步制作yaffs/yaffs2根文件系统(八)---总结及怎么样使系统自动启动自己编写的程序
- 一步一步制作yaffs/yaffs2根文件系统(七)---真挚地道歉以及纠正前边出现的错误!
- 一步一步制作yaffs/yaffs2根文件系统(六)---完善命令行提示符
- 一步一步制作yaffs/yaffs2根文件系统(五)---生成yaffs/yaffs2镜像文件及下载到开发板
- 一步一步制作yaffs/yaffs2根文件系统(四)---构建etc、dev等剩余目录
- 一步一步制作yaffs/yaffs2根文件系统(三)---使用glibc库构造 /lib
- php引入lucene搜索引擎方法.
- 一步一步制作yaffs/yaffs2根文件系统(一)---储备好基础知识再打
- PHP设计模式之单例模式
- PHP中命名空间
- Yii2实现读写分离(MySQL主从数据库)
- 【文件】FileOutputStream 出现 FileNotFoundException
- php关于使用iconv(...)函数对字符进行中文转换时,遇到的一个问题