在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提示Notice: Undefined variable的解决办法
Nov 24 PHP
php计算指定目录下文件占用空间的方法
Mar 13 PHP
php修改文件上传限制方法汇总
Apr 07 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
ThinkPHP数据操作方法总结
Sep 28 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
Dec 17 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
Apr 15 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
May 09 PHP
WordPress分页伪静态加html后缀
Jun 08 PHP
php版阿里云OSS图片上传类详解
Dec 01 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
laravel通过a标签从视图向控制器实现传值
Oct 15 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实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
让人蛋疼的JavaScript语法特性
2014/09/30 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
js打造数组转json函数
2015/01/14 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
angularjs实现上拉加载和下拉刷新数据功能
2017/06/12 Javascript
深究AngularJS之ui-router详解
2017/06/13 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
Python实现PS图像抽象画风效果的方法
2018/01/23 Python
python队列queue模块详解
2018/04/27 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
opencv+python实现均值滤波
2020/02/19 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
代码中finally中的代码会不会执行
2012/02/06 面试题
致铅球运动员加油稿
2014/02/13 职场文书
设备售后服务承诺书
2014/05/30 职场文书
计划生育证明书写要求
2014/09/17 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
Java实现简易的分词器功能
2021/06/15 Java/Android
详解Golang如何优雅的终止一个服务
2022/03/21 Golang
使用refresh_token实现无感刷新页面
2022/04/26 Javascript