在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的一个完整SMTP类(解决邮件服务器需要验证时的问题)
Oct 09 PHP
Discuz 模板语句分析及知识技巧
Aug 21 PHP
10 个经典PHP函数
Oct 17 PHP
php弹出对话框实现重定向代码
Jan 23 PHP
PHP输出日历表代码实例
Mar 27 PHP
php数组随机排序实现方法
Jun 13 PHP
PHP微信开发之有道翻译
Jun 23 PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
Jun 07 PHP
PHP经典设计模式之依赖注入定义与用法详解
May 21 PHP
thinkPHP+LayUI 流加载实现功能
Sep 27 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
Feb 10 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 8小时时间差的解决方法小结
2009/12/22 PHP
php下使用iconv需要注意的问题
2010/11/20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
javascript的push使用指南
2014/12/05 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
js实现下拉框效果(select)
2017/03/28 Javascript
mui 打开新窗口的方式总结及注意事项
2017/08/20 Javascript
js中时间格式化的几种方法
2018/07/22 Javascript
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
TensorFlow平台下Python实现神经网络
2018/03/10 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
Python脚本实现Zabbix多行日志监控过程解析
2020/08/26 Python
python安装及变量名介绍详解
2020/12/12 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
运动会入场词50字
2014/02/20 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
股票投资建议书
2014/05/19 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
甜品店创业计划书
2014/09/21 职场文书
小学生作文批改评语
2014/12/25 职场文书
高二数学教学反思
2016/02/18 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang