入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

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

创建时间:2018-02-10 投稿人: 浏览次数:327

效果:



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
;
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<h1>四个字段的无限分类</h1>
	<form action="{:url("add")}" method="post">
		请选择上级分类:<select name="pid">
			<option value="0">顶级分类</option>
			{foreach $cates as $vo}
				<option value={$vo.id}>|{$vo.pre}{$vo.name}</option>
				
			{/foreach}
			
		</select><br/>

		
		请填写分类的名称:<input type="text" name="name"/></br>
		<input type="submit" value="添加">
	</form>

</body>
</html>
<?php
namespace appindexcontroller;
use thinkDb;
use thinkController;
use appmodelCategory;


class Index extends Controller
{
    public function index()
    {
    //添加分类的界面
    //查询所有的分类
       $db=Db::name("categroy");
       $data=$db->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

<?php
class CategoryModel extends Model{


	#通过上级分类的主键id号查询子类
	public function getTree($pid=0){
		$data=$this->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.="<option value="".$cate["id"]."">".$prefix.$cate["name"]."</option>";
			#判断该分类下是否包含子类,如果有子类,将数组传入接着拼装
			if(!empty($case["cates"])){
				$i++;
				$opt.=$this->getOption($case["cases"]);
			}else{
				$i=0;
			}
			return $opt;
		}
	}
}



声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。