在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系统流量分析的程序
Oct 09 PHP
基于数据库的在线人数,日访问量等统计
Oct 09 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
Jun 03 PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 PHP
php使用curl存储cookie的示例
Mar 31 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
php获取twitter最新消息的方法
Apr 14 PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 PHP
PHP判断数组是否为空的常用方法(五种方法)
Feb 08 PHP
php动态读取数据清除最右边距的方法
Apr 12 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 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中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
jQuery拖动元素并对元素进行重新排序
2015/12/30 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
2016/08/24 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
python下如何让web元素的生成更简单的分析
2008/07/17 Python
Python入门篇之数字
2014/10/20 Python
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
window下eclipse安装python插件教程
2017/04/24 Python
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
python从内存地址上加载python对象过程详解
2020/01/08 Python
Python实现爬取并分析电商评论
2020/06/19 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
无工作经验者个人求职信范文
2013/12/22 职场文书
好的演讲稿开场白
2013/12/30 职场文书
企业管理标语
2014/06/10 职场文书
医院见习总结
2015/06/24 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书
如何用python清洗文件中的数据
2021/06/18 Python
Python必备技巧之字符数据操作详解
2022/03/23 Python
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android
Python使用PyYAML库读写yaml文件的方法
2022/04/06 Python
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫
Java Spring读取和存储详细操作
2022/08/05 Java/Android