在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 相关文章推荐
关于文本留言本的分页代码
Oct 09 PHP
PHP 简单日历实现代码
Oct 28 PHP
基于php在各种web服务器的运行模式详解
Jun 03 PHP
服务器上配置PHP运行环境教程
Feb 12 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
Mar 10 PHP
php实现分页显示
Nov 03 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
Thinkphp整合微信支付功能
Dec 14 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
Jun 02 PHP
Yii2使用表单上传文件的实例代码
Aug 03 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
ThinkPHP3.2框架操作Redis的方法分析
May 05 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
PHP中集成PayPal标准支付的实现方法分享
2012/02/06 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
php实现递归的三种基本方式
2020/07/04 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
浅谈JavaScript的计时器对象
2016/12/26 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
python2和python3的输入和输出区别介绍
2018/11/20 Python
python区块及区块链的开发详解
2019/07/03 Python
Pyecharts地图显示不完成问题解决方案
2020/05/11 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
大一自我鉴定范文
2013/12/27 职场文书
高中数学教学反思
2014/01/30 职场文书
《数星星的孩子》教学反思
2014/04/11 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
员工辞退通知书
2015/04/17 职场文书
人与自然的观后感
2015/06/18 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
进行数据处理的6个 Python 代码块分享
2022/04/06 Python
索尼ICF-5900W收音机测评
2022/04/24 无线电