TP5数据库四个字段实现无限分类
效果:
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。
- 上一篇: TP5增删改查手记
- 下一篇:没有了
