在TP5数据库中四个字段实现无限分类的示例
时间:2022-07-27
本文章向大家介绍在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;
}
}
}
以上这篇在TP5数据库中四个字段实现无限分类的示例就是小编分享给大家的全部内容了,希望能给大家一个参考。
- 云端架构师养成系列之二:云端负载均衡上手与实践
- 微信 PaxosStore:海量数据冷热分级架构
- 使用腾讯云容器服务来构建简单web service
- 使用 plotly 绘制数据图表
- 基于云计算的 CV 移动交互应用研究:头部姿态估计综述(2)
- 使用 trie 树实现简单的中文分词
- 重磅发布!2017年度 DevOps 现状调查报告中文完整版!
- AI 泡沫前,我们怎么办?中美两国人工智能产业发展全面解读
- 养车记账本小程序开发实例
- 基于图像识别的自动化
- 主从同步中的关键技术解析
- 腾讯织云:DevOps 流水线应用平台践行之路
- 腾讯云 GAME-TECH 沙龙干货回顾:与腾讯云携手出海
- 陈杰:无服务器架构,让云端开发更纯粹
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [Oracle 11g RAC安装]RAC环境搭建
- [Oracle 11g RAC安装]Grid安装
- [Oracle 11g RAC安装]Oracle安装
- [Oracle 11g RAC安装]UDEV设置
- Oracle参数(Undo_Retention)
- Oracle基本概念(Undo空间)
- [AWR报告]Buffer Hit %
- [AWR报告]Library Hit %
- [Oracle 9i安装]Redhat 4.8的配置
- [Oracle 9i安装]Oracle软件的安装
- [AWR报告]Latch Hit %
- [Python运维]Python3.6的安装
- [Python运维]cx_Oracle模块的安装
- C#中抽象类与抽象方法的作用与实例
- C++ 基础扫盲(1)