在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 相关文章推荐
PHPMyadmin 配置文件详解(配置)
Dec 03 PHP
PHP GD 图像处理组件的常用函数总结
Apr 28 PHP
PHP中英混合字符串截取函数代码
Jul 17 PHP
php购物车实现代码
Oct 10 PHP
php操作mysqli(示例代码)
Oct 28 PHP
实现获取http内容的php函数分享
Feb 16 PHP
PHP比你想象的好得多
Nov 27 PHP
Thinkphp单字母函数使用指南
May 08 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
thinkphp分页集成实例
Jul 24 PHP
thinkphp5.1框架容器与依赖注入实例分析
Jul 23 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
sql注入与转义的php函数代码
2013/06/17 PHP
php中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
PHP实现验证码校验功能
2017/11/16 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
关于 jQuery Easyui异步加载tree的问题解析
2016/12/06 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
Vue实现返回顶部按钮实例代码
2020/10/21 Javascript
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
tensorflow建立一个简单的神经网络的方法
2018/02/10 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
Python实战购物车项目的实现参考
2019/02/20 Python
Python 处理文件的几种方式
2019/08/23 Python
python随机数分布random均匀分布实例
2019/11/27 Python
pytorch的梯度计算以及backward方法详解
2020/01/10 Python
简单了解Java Netty Reactor三种线程模型
2020/04/26 Python
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
暑期教师培训方案
2014/06/07 职场文书
主题班会开场白
2015/06/01 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书
Python爬虫实战之爬取携程评论
2021/06/02 Python
Go timer如何调度
2021/06/09 Golang
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS