前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在TP5数据库中四个字段实现无限分类的示例

在TP5数据库中四个字段实现无限分类的示例

作者头像
砸漏
发布2020-10-20 14:26:44
3690
发布2020-10-20 14:26:44
举报
文章被收录于专栏:恩蓝脚本恩蓝脚本

效果:

代码语言:javascript
复制
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
;
代码语言:javascript
复制
<!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 
代码语言:javascript
复制
<?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
 */
 }}

还有一个没有写完的递归无限分类

代码语言:javascript
复制
 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

代码语言:javascript
复制
<?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数据库中四个字段实现无限分类的示例就是小编分享给大家的全部内容了,希望能给大家一个参考。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档