在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 相关文章推荐
PHP执行zip与rar解压缩方法实现代码
Dec 05 PHP
介绍一些PHP判断变量的函数
Apr 24 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
May 10 PHP
php中ftp_chdir与ftp_cdup函数用法
Nov 18 PHP
php使用function_exists判断函数可用的方法
Nov 19 PHP
总结PHP删除字符串最后一个字符的三种方法
Aug 30 PHP
PHP弱类型的安全问题详细总结
Sep 25 PHP
Ajax请求PHP后台接口返回信息的实例代码
Aug 21 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
php入门小知识
2008/03/24 PHP
让的PHP代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
支持中文字母数字、自定义字体php验证码代码
2012/02/27 PHP
探讨php define()函数及defined()函数使用详解
2013/06/09 PHP
PHP可变函数的使用详解
2013/06/14 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
jQuery 方法大全方便学习参考
2010/02/25 Javascript
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
vue 设置 input 为不可以编辑的实现方法
2019/09/19 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
python实现多线程的两种方式
2016/05/22 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
python 实现Harris角点检测算法
2020/12/11 Python
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
实习生单位鉴定意见
2013/12/04 职场文书
市政施工员自我鉴定
2014/01/15 职场文书
司法助理专业自荐书
2014/06/13 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
课外小组活动总结
2014/08/27 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
施工安全协议书范本
2014/09/26 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
python munch库的使用解析
2021/05/25 Python