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

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.mzph.cn/news/6645.shtml

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

相关文章

在VSCode中实现Rust编程调试指南

在 VS Code 中调试 Rust:终极指南 在本教程中,您将学习如何使用 VS Code 调试 Rust。可用于使用 VS Code 调试 Rust 的操作。设置 VS Code 来调试 Rust Rust因其易用性、安全性和高性能而继续保持其作为最受欢迎的编程语言的地位。随着 Rust 的流行&…

ubuntu wget ERROR 403: Forbidden 错误

解决办法: 临时变更wget的UA wget -U "浏览器的useragent" 下载地址永久变更Wget(未测试) 修改配置文件/etc/wgetrc,添加下面这一行: header User-Agent: "浏览器的useragent"上面这个配置后…

elementui el-table折叠表格,点击主表数据展开从表明细

用element-ui 的el-table实现&#xff1a;主表table可实现展开行显示关联的明细表table的列表数据&#xff0c;效果图如下 <el-tableref"tableData"v-loading"listLoading":data"tableData"row-key"id"borderstripehighlight-curr…

Unity中的Translate和Rotate

示例代码&#xff1a; using UnityEngine; using System.Collections;public class TransformFunctions : MonoBehaviour {public float moveSpeed 10f;public float turnSpeed 50f;void Update (){//按上箭头向前移动if(Input.GetKey(KeyCode.UpArrow))transform.Translate…

自动驾驶感知系统-激光雷达

感知系统 现有的车载传感器主要包括超声波雷达、激光雷达、毫米波雷达、车载摄像头、红外探头等。主流的自动驾驶感知平台以雷达和车载摄像头为主&#xff0c;呈现多传感器融合发展趋势。基于测量能力和环境适应性&#xff0c;预计雷达和车载摄像头会保持其感知平台霸主地位&a…

在Linux、Ubuntu中跨平台编译ARM(AARCH64)平台的binutils

Binutils 是GNU(https://www.gnu.org/)提供的一组二进制工具的集合。通常,在已经安装了Linux操作系统的个人电脑上,系统就已经自带了这个工具集。但在进行嵌入式开发的时候,可能会用到支持ARM64平台的Binutils,这时就需要用到交叉编译。 此前,在【1】我们已经介绍过Ubun…

在react中配置less

第一步&#xff1a;暴露出webpack配置文件 终端命令&#xff1a;npm run eject (此命令一旦运行不可逆) 第二步&#xff1a;安装less以及less-loader npm install less less-loader --save-dev 第三步&#xff1a;修改webpack的配置文件 运行完以上命令后&#xff0c;项目…

精通自动化,Pytest自动化测试框架-fixture用例的前后置(实现)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试用例实现前后…

一条SQL同时获取总数和分组数量

示例sql如下 select col1,col2,col3,count(*) from table1 t1 join table2 t2 on t1.col1 t2.col1 where 11 group by col1,col2,col3这里是整体数量count&#xff0c;当有一个col4&#xff0c;以它的值为分组条件进行分组&#xff0c;一般情况下&#xff0c;应为 select co…

crmeb部署

安装宝塔 教程 安装所需要的软件 php mysql5.7 redis fileinfo nginx 安装crmeb 重启mysql 前台http://192.168.216.128/ 后台http://192.168.216.128/admin admin admin888登录 访问前台

自动化运维工具--saltstack部署及使用

目录 一、saltstack简介 1、介绍 2、Salt的核心功能 3、saltstack通信机制 二、saltstack部署 1、部署环境 2、配置yum源 3、安装master与minion 4、连接认证master和minion 三、salt运行 1、执行格式 2、实操演示 一、saltstack简介 1、介绍 saltstack是一个配置管…

2023国际数模A题-购物评论的数据分析【具体分析+代码 持续更新!!】

问题1:请建立文本分析的数学模型 商品评论,统计评论中单词的出现频率,利用附录一和附录二中的评论绘制单 词云图,并进行数据和信息的可视化分析。 解答: 建立文本分析的数学模型 首先,我们需要对商品评论进行文本处理,包括去除停用词、词干提取、词义还原等操作。然后…

连锁反应开始了!Linux 发行版迎新变化!

任何企业都有合法权利捍卫其模型和产品。撇开大量不真正了解开源许可证如何工作的人不谈&#xff0c;我们的印象是&#xff0c;有很多人觉得仅仅因为这是Linux&#xff0c;他们就有某种权利免费获得它。但事实上&#xff0c;他们没有。这不是自由软件中的“自由”的意思&#x…

浮点型在内存中的存储

目录 1.浮点数是什么&#xff1f; 2. 浮点数存储规则 1.浮点数是什么&#xff1f; 就是数学中的小数。 常见的浮点数&#xff1a; 3.14159 1E10&#xff08;1*10^10&#xff09; 浮点数家族包括&#xff1a; float、double、long double 类型。 浮点数表示的范围&#x…

【微信小程序】要在两个<view>之间绘制一条分割线,使用border属性和样式

要在两个<view>之间绘制一条分割线&#xff0c;可以使用border属性以及适当的样式设置。以下是一个示例代码&#xff1a; <view class"container"><view class"content">内容</view><view class"divider"></v…

前端 | ( 十二)CSS3简介及基本语法(中)| 变换、过渡与动画 | 尚硅谷前端html+css零基础教程2023最新

学习来源&#xff1a;尚硅谷前端htmlcss零基础教程&#xff0c;2023最新前端开发html5css3视频 系列笔记&#xff1a; 【HTML4】&#xff08;一&#xff09;前端简介【HTML4】&#xff08;二&#xff09;各种各样的常用标签【HTML4】&#xff08;三&#xff09;表单及HTML4收尾…

iOS and Andriod兼容问题汇总,持续添加,期待一起进步

以下是一些具体的元素和方法在iOS和Android之间可能存在的兼容性问题及其解决方案&#xff1a; fixed定位在iOS上的兼容问题&#xff1a;在iOS中&#xff0c;使用fixed定位时会出现滑动卡顿的现象。解决方案&#xff1a;使用transform: translateZ(0)或者-webkit-overflow-scro…

【C++基础(六)】类和对象(中) --构造,析构函数

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C初阶之路⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 类和对象-中 1. 前言2. 构造函数3. 构造函数的特性4…

分布式系统的应用程序性能监视工具-skywalking

分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。提供分布式链路日志追踪、剖析、服务网格遥测分析、度量聚合和可视化一体化解决方案。 在应用系统进行实时监控,实现对应用性能管理和故障定位的系统化解决方案中常用的…

数据结构问答8

查找 1. 一些基本概念 关键字:能唯一标识该元素 查找:给定值k,在含n个元素的表中找出关键字==k的元素。找到返回其位置信息,否则返回-1。 动、静态查找表:查找同时对表进行修改(插入、删除等),相应的表为动态,否则为静态。 内、外查找:整个查找过程在内存中进行…