3.10 学习-侧边导航
第 30 节 / 共 46 节
课程:ThinkPHP
顶部菜单中的学习
首先发起一个post请求chapters,发送的参数为courseId以及一个标记参数all。
在统计的时候,已经有一个chapters请求,当时是查找所有章节,然后用作下拉菜单,并不需要做子章节,而这个all就是标记,如果这个值不为空,那么按这一节的要求做子章节(有subChapters)
返回的json将填满左侧的章节导航,json结构如下:
{ "code": "200", "info": "31", "data": [ { "score": 0, "code": "010000", "parentCode": "000000", "serial": "第1章", "name": "ThinkPHP介绍", "subChapters": [ { "score": 0, "code": "010100", "parentCode": "010000", "serial": "1.1 ", "name": "配置环境", "id": "771" }, { "score": 0, "code": "010200", "parentCode": "010000", "serial": "1.2 ", "name": "第一个ThinkPHP项目", "id": "772" }, { "score": 0, "code": "010300", "parentCode": "010000", "serial": "1.3 ", "name": "启动项目", "id": "783" }, { "score": 0, "code": "010400", "parentCode": "010000", "serial": "1.4 ", "name": "项目部署", "id": "792" } ], "id": "765" }, { "score": 175, "code": "020000", "parentCode": "000000", "serial": "第2章", "name": "基本特性", "subChapters": [略...], } //其余部分略 ]}这里的难点在于子章节,除了从数据库里找到章节数据外,还要从code值再去查一次数据库,看有没有子章节,有的话把数据绑定到subChapters下,下面是实现的PHP代码:
use think\facade\Db;$chapterList=Db::table('chapter')-> where('course_id',$courseId)-> where('code','like','__0000')-> select();$data=[];foreach($chapterList as $cha){ $obj=[ 'score'=> $cha['score'], 'code'=> $cha['code'], 'parentCode'=> $cha['parent_code'], 'name'=> $cha['name'], 'id'=> $cha['id'], ]; //获取子章节(只处理一层,如懂递归可改为递归实现) $subChapters=Db::table('chapter') -> where('course_id',$courseId) -> where('parent_code',$cha['code']) -> select(); if(count($subChapters) > 0){ $obj['subChapters']=[]; foreach($subChapters as $c){ $obj['subChapters'][]=[ 'score'=> $c['score'], 'code'=> $c['code'], 'name'=> $c['name'], 'id'=> $c['id'], ]; } } $data[]=$obj;}return $this-> success($data,(string)$courseId);至于serial这个属性,也就是显示"第1章"、"1.2"等值,它是根据code值计算出来的:
function getChapterSerial($code){ if(empty($code)) return ''; $m1=intval(substr($code,0,2)); $m2=intval(substr($code,2,2)); $m3=intval(substr($code,4,2)); //主章节:返回"第1章"形式 if($m2==0 && $m3==0){ $chinese=['','一','二','三','四','五','六','七','八','九','十', '十一','十二','十三','十四','十五','十六','十七','十八','十九','二十']; return '第'.($chinese[$m1]?? $m1).'章'; } //子章节:返回"1.2"形式 if($m3==0){ return "$m1.$m2 "; } return "$m1.$m2.$m3 ";}尝试完成学习页面的左边栏
《ThinkPHP》课程目录
介绍PHP框架ThinkPHP6
- 第1章 配置环境
- 1.1 第一个ThinkPHP8项目
- 1.2 Composer项目结构介绍
- 1.3 启动项目
- 1.4 ThinkPHP8项目的部署
- 1.5 idea教育版免费一年获取办法
- 第2章 基本特性
- 2.1 响应HTTP请求
- 2.2 响应html
- 2.3 登录-前端
- 2.4 登录-后台
- 2.5 数据库基本操作
- 2.6 模型支持
- 2.7 登录状态和session
- 2.8 注册
- 2.9 主页文章列表
- 2.10 单篇文章内容
- 2.11 完善文章页面
- 2.12 文件上传
- 第3章 实训
- 3.1 项目准备
- 3.2 登录
- 3.3 数据库登录和json规范返回
- 3.4 注册
- 3.5 查询课程
- 3.6 个人信息
- 3.7 修改昵称
- 3.8 *主页信息
- 3.9 统计
- 3.10 学习-侧边导航
- 3.11 *学习-右边内容
- 3.12 管理-课程
- 3.13 管理-班级
- 3.14 管理-班级-学生换班
- 3.15 管理-班级-查找学生
- 第4章 git代码管理
- 4.1 建立代码库
- 4.2 代码管理提交、推送和拉取
- 4.3 从云克隆代码
- 第5章 项目重构成spirngboot
- 5.1 项目技术介绍
- 5.2 创建一个ThinkPHP8项目
- 5.4 移入网页和PHP代码
- 5.5 模型和服务
- 5.7 测试
- 第6章 nginx