<?php
/*
* 本类实现的是无限级递归分类的管理
*/
class InfiniteLevel{

public $id_str="";
public function add_top($modelName,$data,$id=0){//添加顶级分类
$model = D($modelName);
$data['parent_id_str'] = ',0,';
$data['depth'] = '0';
$data['create_time'] = time();
if ($id>0) {
$model->where('id="'.$id.'"')->save($data);
}else{
$id = $model->add($data);
}
return $id;
}
public function add_child($modelName,$data,$parentId=0){
$model = D($modelName);
if ($parentId>0) {
$tempModel = $model->where(array('id'=>$parentId))->find();
$depth = $tempModel['depth']+1;
$parent_id_str = $tempModel['parent_id_str'].$parentId.',';
$data['parent_id_str'] = $parent_id_str;
$data['depth'] = $depth;
$data['create_time'] = time();
$id = $model->add($data);
return $id;
}
}
public function move(){}  //项目暂时用不上,以后再写把
public function delete(){} //项目暂时用不上,以后再写把

//1
public function list_model($modelName){
$model = D($modelName);
$list = $this->_all_child($modelName);
return urldecode(urldecode(json_encode($list)));
}
//2
private function _all_child($modelName,$parentId=0,$depth=0,$data=NULL){
$model = D($modelName);
$data['parent_id'] = $parentId;
$data['depth'] = $depth;
$data['is_deleted'] =0;
$childArr = $model->field('id,name,parent_id,parent_id_str,depth')->where($data)->select();

$maxNum = count($childArr);
if ($maxNum>0) {
foreach ($childArr as $key => $value) {
$value['name'] = urlencode($value['name']);
$item = $this->_all_child($modelName,$value['id'],($value['depth']+1),$childArr);
if ($item) {
foreach ($item as $k => $v) {
$v['name'] = urlencode($v['name']);
$item[$k] = $v;
}
$value['child'] = $item;
$childArr[$key] = $value;
}
}

return $childArr;
}else{
return;
}
}

//
public function _self_child($modelName,$parentId=0,$num=0){

$model = D($modelName);
$data['parent_id'] = $parentId;
$data['is_deleted'] =0;
$childArr = $model->field('id,name,parent_id,parent_id_str,depth')->where($data)->select();
if($num==0){
$id_str=$parentId.",";
}else{
$id_str="";
}

$maxNum = count($childArr);
if ($maxNum>0) {

foreach ($childArr as $key => $value) {
$id_str.=$value['id'].",";
$item = $this->_self_child($modelName,$value['id'],$num=1);
$id_str.=$item;

}
return $id_str;
}else{
return;
}
}
}

最新文章

  1. Android Fragment (一)
  2. OpenCV imread读取图片,imshow展示图片,出现cv:Exception at memory location异常
  3. Paxos一致性算法
  4. textContent 与innerText
  5. WEB前端性能优化小结
  6. 时间同步方法及几个可用的NTP服务器地址
  7. copy和mutableCopy都是浅拷贝!!!------你被骗了很多年
  8. 【AIX】AIX内存机制
  9. Spring 中@NotNull, @NotEmpty和@NotBlank之间的区别是什么?
  10. Git默认用户名和密码设置
  11. vue render里面的nativeOn
  12. P2326 AKN’s PPAP
  13. 读书笔记 C#委托的BeginInvoke、EndInvoke之浅析
  14. .NET数据挖掘与机器学习开源框架
  15. [Windows]Win10下VM虚拟机桥接模式无法上网的解决办法
  16. PHP的垃圾回收
  17. C++ 设计模式 —— 訪问者(Visitor)
  18. google浏览器安装不上的绝望经历
  19. SQL语句中的单引号处理以及模糊查询
  20. [转]访问 OData 服务 (WCF Data Services)

热门文章

  1. acm相关(纯转载)
  2. 以gnome-terminal为例,修改gnome3 的默认配置
  3. python爬虫29 | 使用scrapy爬取糗事百科的例子,告诉你它有多厉害!
  4. 牛客网NOIP赛前集训营 提高组 第5场 T2 旅游
  5. 【Codeforces 988D】Points and Powers of Two
  6. rest frame work纪念版代码
  7. M - 小希的迷宫 并查集
  8. Codeforces Goodbye2016
  9. spring-cloud-starter-ribbon提供客户端的软件负载均衡算法
  10. 7、Java并发性和多线程-如何创建并运行线程