thinkphp实现无限分类(使用递归)

news2024/11/26 16:29:31

thinkphp实现无限分类(使用递归)

本文实例为大家分享了thinkphp实现无限分类的详细代码,希望对大家学习无限分类有所启发。

数据库:test

数据表:(tp_category):

Common/conf/config.php

'DB_CONFIG2' => array(

'db_type' => 'mysql',

'db_user' => 'root',

'db_pwd' => '',

'db_host' => 'localhost',

'db_port' => '3306',

'db_name' => 'test',

'DB_PREFIX' => 'tp_', // 数据库表前缀

'DB_CHARSET'=> 'utf8', // 字符集

'DB_DEBUG' => TRUE, // 数据库调试模式 开启后可以记录SQL日志 3.2.3新增

),

Common/function.php 遍历函数loop

/*

* 递归遍历

* @param $data array

* @param $id int

* return array

* */

function recursion($data, $id=0) {

$list = array();

foreach($data as $v) {

if($v['pid'] == $id) {

$v['son'] = recursion($data, $v['id']);

if(empty($v['son'])) {

unset($v['son']);

}

array_push($list, $v);

}

}

return $list;

}

Controller/IndexController.class.php

public function test() {

$category = M('category', '', C('DB_CONFIG2'))->select();

$result = loop($category);

var_dump($result);

$this->assign('list', $result);

$this->display();

}

在模板(View/Index/test.html)中输出(仅支持2级分类,如果想全部显示,建议先把数组转换成jsON格式,然后通过AJAX请求,JS生成)

{$vo.category}

后续(ajax请求,递归显示所有分类):

方法Controller/IndexController.class.php

public function test() {

$this->display();

}

public function resultCategory() {

$category = M('category', '', C('DB_CONFIG2'))->select();

$result = loop($category);

$this->ajaxReturn(array('data'=>$result,'status'=>'1','info'=>'获取列表成功'));

}

模板View/Index/test.html

另一种无限级分类:

/**

* 无限极分类

* @param [type] $cate [description]

* @param integer $pid [description]

* @param integer $level [description]

* @param string $html [description]

* @return [type] [description]

*/

function sortOut($cate,$pid=0,$level=0,$html='--'){

$tree = array();

foreach($cate as $v){

if($v['pid'] == $pid){

$v['level'] = $level + 1;

$v['html'] = str_repeat($html, $level);

$tree[] = $v;

$tree = array_merge($tree, sortOut($cate,$v['id'],$level+1,$html));

}

}

return $tree;

}

JS递归(特殊):

这个函数相当于实现php的str_repeat函数

/* 字符串重复函数 */

if(!String.str_out_times) {

String.prototype.str_out_times = function(l) {

return new Array(l+1).join(this);

}

}

// 定位到当前选择

function recursion(selector, data, j, pid) {

var space = ' ┠ ';

if(!data) return false;

$.each(data, function(i, item) {

var opt = $('

');selector.append(opt);

if(item.son && (item.son).length>0) {

recursion(selector, item.son, ++j);

j=0;

}

});

// 当前是哪个分类http://

selector.find('option').each(function() {

if($(this).val() == pid) {

$(this).attr('selected', 'selected');

}

});

}

为什么j=0呢。因为执行顺序感觉与php不同,这里是从上到下加载。。

ajax请求数据:

$('.btn-edit').click(function() {

var id = $(this).data('id');

$.post("{:U('Article/editArticle')}", {id: id}, function(res) {

// 分类

$('[name="pid"]').html('');

recursion($('[name="pid"]'), res.sort, 0, res.pid);

$('[name="id"]').val(res.id);

$('[name="title"]').val(res.title);

$('[name="summary"]').val(res.summary);

$('#thumbnailImg').attr('src', "__UPLOAD__"+'/thumbnail/'+res.thumbnail);

ue.setContent(res.content);

$('#modal-edit').modal('show');

});

});

以上就是thinkphp实现无限分类的方法,希望对大家的学习有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/784799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python如何读写配置文件?

目录 什么是配置文件 常见的配置文件格式 为什么要使用配置文件 Python如何读写配置文件? 什么是配置文件 配置文件是用于存储程序或系统的设置和配置选项的文本文件。它通常以特定的格式编写,以便程序或系统可以读取和解析其中的配置信息。配置文件…

汽车资讯新闻网站nodejs+vue

本汽车资讯网站有管理员和用户。管理员功能有个人中心,用户管理,汽车品牌管理,价格分类管理,经销商管理,汽车信息管理,留言板管理,系统管理等。用户可以查看各种汽车信息,还可以进行…

Spring 中一个少见的引介增强 IntroductionAdvisor

我们平时做 AOP 开发的时候,基本上都是增强某一个方法,在某一个方法执行之前或者执行之后做一些事情,这种叫做 PointcutAdvisor,实际上,Spring 中的 Advisor 大致可以分为两种类型,除了 PointcutAdvisor 之…

极简并优雅的在IDEA使用Git远程拉取项目和本地推送项目

连接Git 搜索Git然后将你下载好的Git的文件目录位置给他弄进去就行 本地分支管理 分支管理通常是在IDEA的右下角找到 连接远程仓库 方法1本地项目推送到远程仓库 如果当前项目还没交给Git管理的则按照以下图所示先将项目交给Git管理 然后此时文件都会是红色的,这表…

3.矩阵常用操作

文章目录 线性代数的常用操作1.向量的内积2.向量的外积3.正交向量4.正交向量组5.向量空间的基与维数6.正交矩阵7.反对称矩阵8.齐次坐标与齐次变换矩阵9.相似矩阵10.相似对角化11.矩阵的特征分解12.奇异值分解SVD12.1 SVD求齐次矩阵方程的最小二乘解 13.满秩分解14.Pseudo-Inver…

Python入门【 控制语句和逻辑思维、选择结构(条件判断结构)双分支选择结构、多分支选择结构、循环结构、while循环 】(七)

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…

LeetCode·每日一题·2208. 将数组和减半的最少操作次数·优先队列

作者:小迅 链接:https://leetcode.cn/problems/minimum-operations-to-halve-array-sum/solutions/2357852/you-xian-dui-lie-zhu-shi-chao-ji-xiang-x-805n/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作…

如何打开工业相机(海康)与halcon方式打开

使用海康相机,下载对应的客户端软件 地址:https://www.hikrobotics.com/cn/machinevision/service/download 界面如下: 使用 halcon 读取相机,需要将对应的动态链接库dll文件放入halcon的安装目录中,如下,…

Linux中的chmod命令使用方法总结

chmod命令用于更改文件或目录的权限chmod命令的基本语法如下:范例研究:rwx权限对于文件和目录的作用 chmod命令用于更改文件或目录的权限 它允许用户控制谁可以读取、写入和执行文件。 权限由三个组成部分组成,分别是所有者权限、所属组权限…

企业邮箱选购:选择最适合您的方案

作为一名公司员工,你需要一个专业且令人难忘的公司电子邮件地址。毕竟无论何时你和你的联系人交流,你都代表着你公司的品牌。但是你应该选择什么样的公司电子邮件地址呢? 首先,考虑使用你公司的域名作为你的公司电子邮件地址。这是最专业的方…

【C++入门到精通】C++入门—缺省参数、函数重载

目录 前言 一、缺省参数 1.缺省参数的概念 2.缺省参数分类 ⭕全缺省参数 ⭕半缺省参数 二、函数重载 1.函数重载的概念 2.函数重载类型 🔴参数类型不同 🔴参数个数不同 🔴参数类型顺序不同 C支持函数重载的原理--名字修饰(name Mangli…

基于Android Studio编辑器上开发的一款看点新闻App

完整资料进入【数字空间】查看——baidu搜索"writebug" 1 系统需求分析 1.1 引言 1.1.1 开发目的 看点新闻App的开发是为了实时查看最新消息以了解社会动态,增长知识,增广见闻,顺便娱乐一下内心世界来放松自己。 1.1.2 开发背景 …

【雕爷学编程】Arduino动手做(85)---LCD1602液晶屏模块4

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

FPGA学习——实现任意倍分频器(奇数/偶数倍分频器均可实现)

文章目录 一、分频器二、Verilog实现任意倍分频器2.1、Verilog源码2.2、仿真文件 三、仿真波形图 一、分频器 在FPGA(可编程逻辑门阵列)中,分频器是一种用于将时钟信号的频率降低的电路或模块。它可以根据输入的时钟信号生成一个较低频率的输…

Vivado 差分输出引脚配置

diff_out输出如下所示 在引脚配置时,如下图所示,只能设置一个Pos Diff的引脚,此时设置完Pos Diff的引脚后,Neg Diff默认被绑定在相邻的引脚 我们可以打开上图中Package Pins页面,发现这一对引脚设置完毕

基于Java+Swing+mysql人力资源管理系统_员工信息管理系统

基于JavaSwingmysql人力资源管理系统/员工信息管理系统 一、系统介绍二、效果展示1、登陆2、查看个人信息--员工3、更新个人信息--员工4、管理员主页(增删改查) 三、其他系统实现四、获取源码 一、系统介绍 系统主要分为两个角色: 员工&…

【LeetCode-中等】剑指 Offer 67. 把字符串转换成整数(详解)

题目 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时&#…

【ArcGIS Pro微课1000例】0029:绘制全球海洋波纹荡漾效果图

本文讲解ArcGIS Pro3.0中,基于全球航洋面状矢量数据,绘制震撼全球海洋波纹荡漾效果图。 文章目录 一、效果预览二、效果制作三、参数详解一、效果预览 绘制好的海水波纹荡漾效果图如下: 下面我们来学习绘制过程。 二、效果制作 波纹荡漾效果需要在全局或者局部场景中制作…

7月最新大模型排名!3700道保密试题、20个大模型参与评测|SuperCLUE

7月最新大模型排名!3700道保密试题、20个大模型参与评测|SuperCLUE CLUE中文语言理解测评基准 中文通用大模型综合性评测基准SuperCLUE 2023年7月榜单 7月25日,SuperCLUE发布大模型7月榜单。 SuperCLUE: A Benchmark for Foundation Mo…

【TypeScript】类型推断与类型别名的使用方式。

什么是类型推断? 在 TypeScript 中, 如果声明变量时,没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型。 以下代码虽然没有明确指定类型,但是会在编译的…