在TP5数据库中四个字段实现无限分类的示例


Posted in PHP onOctober 18, 2019

效果:

在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 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
 */
 }}

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

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数据库中四个字段实现无限分类的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP4实际应用经验篇(8)
Oct 09 PHP
模仿OSO的论坛(一)
Oct 09 PHP
PHP5 面向对象程序设计
Feb 13 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
Discuz!下Memcache缓存实现方法
May 28 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
Jul 25 PHP
php显示时间常用方法小结
Jun 05 PHP
微信公众平台开发之天气预报功能
Aug 31 PHP
基于swoole实现多人聊天室
Jun 14 PHP
thinkphp框架类库扩展操作示例
Nov 26 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
Dec 02 PHP
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
Apr 01 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 #PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 #PHP
tp5.1 实现setInc字段自动加1
Oct 18 #PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
Oct 18 #PHP
thinkphp5 模型实例化获得数据对象的教程
Oct 18 #PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
Oct 18 #PHP
tp5 sum某个字段相加得到总数的例子
Oct 18 #PHP
You might like
一个高ai的分页函数和一个url函数
2006/10/09 PHP
php INI配置文件的解析实现分析
2011/01/04 PHP
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
2017/02/17 Javascript
VUE 使用中踩过的坑
2018/02/08 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
2019/05/17 Javascript
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
朴素贝叶斯算法的python实现方法
2014/11/18 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
python3利用tcp实现文件夹远程传输
2018/07/28 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
python 实现矩阵填充0的例子
2019/11/29 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
this关键字的含义
2015/04/08 面试题
解决方案设计综合面试题
2015/08/31 面试题
大学应届毕业生求职信
2014/05/24 职场文书
三严三实对照检查材料
2014/09/22 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
三行辞职书范文
2015/02/26 职场文书
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript