在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 相关文章推荐
利用js调用后台php进行数据处理原码
Oct 09 PHP
新版PHP极大的增强功能和性能
Oct 09 PHP
学习使用curl采集curl使用方法
Jan 11 PHP
php中拷贝构造函数、赋值运算符重载
Jul 25 PHP
PHP获取php,mysql,apche的版本信息示例代码
Jan 16 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
Dec 19 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
php计算税后工资的方法
Jul 28 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
Feb 10 PHP
Yii2 批量插入、更新数据实例
Mar 15 PHP
基于win2003虚拟机中apache服务器的访问
Aug 01 PHP
PHP中单例模式的使用场景与使用方法讲解
Mar 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基础知识:类与对象(5) static
2006/12/13 PHP
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
Javascript的构造函数和constructor属性
2010/01/09 Javascript
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
js对数字的格式化使用说明
2011/01/12 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
js实现抽奖功能
2020/11/24 Javascript
python 从远程服务器下载日志文件的程序
2013/02/10 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
如何基于python实现归一化处理
2020/01/20 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
详解Python中openpyxl模块基本用法
2021/02/23 Python
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
JAVA和C++的区别
2013/10/06 面试题
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
业务副厂长岗位职责
2014/01/03 职场文书
学习决心书
2014/03/11 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
环境卫生整治简报
2015/07/20 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL