效果:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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
;
|
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<!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>
|
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
<?php
namespace app\\index\\controller;
use think\\Db;
use think\\Controller;
use app\\model\\Category;
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
*/
}}
|
还有一个没有写完的递归无限分类
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<?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 ;
}
}
}
|
以上这篇在TP5数据库中四个字段实现无限分类的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。
原文链接:https://blog.csdn.net/weixin_36171533/article/details/79307643
相关文章
猜你喜欢
- ASP.NET自助建站系统的域名绑定与解析教程 2025-06-10
- 个人服务器网站搭建:如何选择合适的服务器提供商? 2025-06-10
- ASP.NET自助建站系统中如何实现多语言支持? 2025-06-10
- 64M VPS建站:如何选择最适合的网站建设平台? 2025-06-10
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-05-29 69
-
2025-05-25 1
-
2025-05-25 75
-
2025-05-27 12
-
2025-06-04 71
热门评论