在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 set_time_limit(0) 设置程序执行时间的函数
May 26 PHP
PHP安全配置详细说明
Sep 26 PHP
Drupal简体中文语言包安装教程
Sep 27 PHP
php动态变量定义及使用
Jun 10 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
[原创]PHP字符串中插入子字符串方法总结
May 06 PHP
PHP5.4起内置web服务器使用方法
Aug 09 PHP
一个非常实用的php文件上传类
Jul 04 PHP
PHP网页安全认证的实例详解
Sep 28 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
Oct 24 PHP
php识别翻转iphone拍摄的颠倒图片
May 17 PHP
php中的explode()函数实例介绍
Jan 18 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中使用curl_init函数的说明
2010/11/02 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
javascript在一段文字中的光标处插入其他文字
2007/08/26 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
2012/10/11 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
2018/07/03 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
Vue可自定义tab组件用法实例
2019/10/24 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
python批量制作雷达图的实现方法
2016/07/26 Python
python matlibplot绘制3D图形
2018/07/02 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
selenium中get_cookies()和add_cookie()的用法详解
2020/01/06 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
谈谈python垃圾回收机制
2020/09/27 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
Prototype如何更新局部页面
2013/03/03 面试题
教师找工作推荐信
2013/11/23 职场文书
银行批评与自我批评
2014/02/10 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
2015年感恩父亲节活动策划方案
2015/05/05 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
2015高中教师个人工作总结
2015/07/21 职场文书
外出学习心得体会范文
2016/01/18 职场文书
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js