TP5数据库四个字段实现无限分类

效果:

TP5数据库四个字段实现无限分类_第1张图片

TP5数据库四个字段实现无限分类_第2张图片

CREATE TABLE `NewTable` (
`id`  int(11) UNSIGNED NOT NULL AUTO_INCREMENT ,
`pid`  int(10) UNSIGNED ZEROFILL NOT NULL ,
`name`  varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`path`  varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=53
CHECKSUM=0
ROW_FORMAT=DYNAMIC
DELAY_KEY_WRITE=0
;



	
	Document


	

四个字段的无限分类

请选择上级分类:
请填写分类的名称:
order('concat(path,"-",id)')->select();
       #order('concat(path,"-",id)')自动排序
       foreach ($data as &$cate) {
         $prefix='';
         $i=count(explode("-", $cate['path']));
         for($n=0;$n<=$i;$n++){
            $prefix.="--";
         }
         $cate['pre']=$prefix;
       }
        $this->assign('cates',$data);
     return $this->fetch();
    }
    public function add(){
      $db=Db::name('categroy');
       if($_POST['pid']==0){
            $_POST['path']=0;

        }else{
            $_POST['path']=$db->where('id='.$_POST['pid'])->value('path')."-".$_POST['pid'];   
        }
            $name=$_POST['name'];
        if($db->insert($_POST)){
            $this->success('添加成功');
        }else{
            $this->error('添加失败');
        }
       #原理:4个字段
       /*
       ID   PID   NAME   PATH
       1    0     服装    0-1
       2    0     游戏    0-2
       3    1     男装    0-1-3
       4    3     上衣    0-1-3-4

        */
    }}

还有一个没有写完的递归无限分类

   public function user(){
        $db=Db::name('categroy1');
        // $data=$db->getTree();
        $opt=$db->getOption($data);
        $this->assign('opt',$opt);
        $this->assign('cates',$data);
        return $this->fetch();
    }
    public function doAdd(){
      //执行添加数据
       $db=Db::name('categroy1');
      if($db->insert()){
        $this->success('添加成功',url('index'));
      }else{
        $this->error('添加失败',url('index'));
      }
        return $this->fetch();
    }

Model

where('pid='.$pid)->select();
		foreach($data as &$cate){
			#通过该分类的主键id查询该分类的子类
			$cate['cates']=$this->getTree($cate['id']);
		}
		return $data;
	}

	#拼装属性结构
	#通过一个数组组装option
	public function getOption($data){
		static $i=0;
		for($n=0;$n<=$i*2;$n++){
			$prefix.="-";
		}
		foreach ($data as $cate) {
			$opt.="";
			#判断该分类下是否包含子类,如果有子类,将数组传入接着拼装
			if(!empty($case['cates'])){
				$i++;
				$opt.=$this->getOption($case['cases']);
			}else{
				$i=0;
			}
			return $opt;
		}
	}
}



你可能感兴趣的:(PHP)