专家动态页面的实现——php基于CI框架的学习(二)
ccwgpt 2024-09-26 08:08 32 浏览 0 评论
以下是本次学习的页面
打开相关文件,整个定义了一个Expert类
class Expert extends CI_Controller{}
在Expert类里定义了几个参数以及说明其使用了哪些model
function __construct() {
$this->whitelist = "index";
parent::__construct ( );
$this->load->model ( 'category_model' );
$this->load->model ( "expert_model" );}
然后我们看function index() 里的代码,一行行看下来
$navtitle = "问题专家";
$cid = intval ( $this->uri->segment ( 3 ) ) ? $this->uri->segment ( 3 ) : 'all'; //分类id$status = null!== $this->uri->segment ( 4 ) ? $this->uri->segment ( 4 ) : 'all'; //排序
可以在页面中一一对应
if ($cid != 'all') {
$category = $this->category [$cid]; //得到分类信息
$navtitle = $category ['name'] . "专家列表";
$cfield = 'cid' . $category ['grade'];//获取分类的等级}
第二行语句有点难以理解,选中后面的category查看引用,可以发现当前category是来自System/core目录下文件controller.php的全局变量。
private static $instance;
var $cache;
var $currentuid = array ();
var $setting = array ();
var $category = array ();
var $usergroup = array ();
var $whitelist;
var $time;var $ip;
同时再选中$category右键查看快速引用,会找到下面几行代码
$this->load->database ();$category = $this->category = $this->cache->load ( 'category', 'id', 'displayorder' );
访问缓存数据,通过load()获取数据库里,名字为“category”的数据表里的id和displayorder字段的数据,以下是load函数的源代码
注意:数据访问之前,会先通过下面的函数从缓存里访问数据,如果失败就会自动去读取数据然后写入缓存
function fromcache($cachename,$cachetime = 3){}
总之,由上方可以得出全局变量$category中读取的是数据库某条数据,源代码
$category = $this->category [$cid]; //得到分类信息
意为:Expert新定义的$category 为 db.category.id = cid 的整条数据库的信息
//上接源代码,即$cid == 'all'的情况
else {
$category ['name'] = '';
$category ['id'] = 'all';
$cfield = '';
$category ['pid'] = 0;
}
if ($cid != 'all')
$category = $this->category_model->get ( $cid );
$sublist = $this->category_model->list_by_cid_pid ( $cid, $category ['pid'] ); //获取子分类
此段代码包含的函数:
$this->category_model->get ( $cid );
该方法里包括了还包括了一个通过cid的值在数据表catagory里获取分类封面图的方法
$this->category_model->list_by_cid_pid ( $cid, $category [‘pid’] )
function list_by_cid_pid($cid, $pid) {
$cid=intval($cid);
$pid=intval($pid);
$sublist = array ();
//把cid,pid值等于'all'的分类设置为平级的分类
if ($cid == 'all') {
$cid = 0;
}
if ($pid == 'all') {
$pid = 0;
}
$where=" and onlybackground!=1 ";
//在数据表里寻找与函数参数pid相同的分类id
//使pid分类为id的子分类
$query = $this->db->query ( "select * from " . $this->db->dbprefix . "category where pid=$cid and isuseask=1 $where order by displayorder asc,id asc" );
//给子分类添加封面缩略图和大图
foreach ( $query->result_array () as $category ) {
$category ['image'] = get_cid_dir ( $category ['id'], 'big' );
$category ['bigimage'] = get_cid_dir ( $category ['id'], 'big' );
$sublist [] = $category;
}
return $sublist;}
我们可以访问相关的数据库来
几个分类之间等级关系在这里
我们发现默认分类下面没有子分类,计算机分类下面有PHP,结合数据表就能得知,分类A的pid属性值等于某分类B的id值,那么分类A就是分类B的子分类,除子分类外,其他分类平级
然后我们再去查看该函数在浏览界面显示子分类的原理,我们就能更好地理解地源码了
//判断网页是否是付费内容
$orderwhere = '';
switch ($status) {
case 'all' : //全部
$orderwhere = '';
break;
case '1' : //付费
$orderwhere = ' and mypay>0 ';
break;
case '2' : //免费
$orderwhere = " and mypay=0 ";
break;
default:
$orderwhere = '';
break;
}
$page = max ( 1, intval ( $this->uri->segment ( 5 ) ) );
$pagesize = $this->setting ['list_default'];$startindex = ($page - 1) * $pagesize;
$page = max ( 1, intval ( $this->uri->segment ( 5 ) ) );
令当前页面的page为$this->uri->segment ( 5 )返回的整数值,如果不存在该地址就返回1,此网页返回1,因为最多只有四个分页
$pagesize = $this->setting [‘list_default’];
setting同上文的$category一样,都是定义好的全局变量
setting存储的是数据库里的“setting”数据表在此处调用了字段 ‘ list_default ’ 的值,意为一张页面默认显示的列表数量为15条
$startindex = ($page – 1) * $pagesize;
网页的起始页码设置,为当前页码减1,因为计算机计数是从0开始的
//冗长的,本页面最后一个判断语句
$rownum = $cid == 'all' ? returnarraynum ( $this->db->query ( getwheresql ( 'user', " expert=1 " . $orderwhere , $this->db->dbprefix ) )->row_array () ) : returnarraynum ( $this->db->query ( getwheresql ( 'user', " expert=1 " . $orderwhere . "and uid IN (SELECT uid FROM " . $this->db->dbprefix . "user_category WHERE cid=$cid)" , $this->db->dbprefix ) )->row_array () );
该语句中调用了以下方法
大概意思为:
当前cid = ‘all’时
查询数据表 user数据中,expert = 1 (代表是专家)的orderwhere 是不是免费的数量
当前cid <> ‘all’时
查询数据表 user数据中,expert = 1 (代表是专家)而且 user_category(用户认证的专家分类数据表).cid = 当前的cid ,这条数orderwhere 是不是免费的的数量
//展示专家列表,get_list获取user数据表所有专家用户id
//并判断他是否认证,最后一次登陆时间,关注人数,被关注次数,个人擅长分类
$expertlist = $this->expert_model->get_list ( 1, $startindex, $pagesize, $cid, $status );
//通过page函数,以分类的id号,是否免费重新建立两个分页
$departstr = page ( $rownum, $pagesize, $page, "expert/default/$cid/$status" );
//使当前页面,每一页面最多可处理15条数据
$questionlist = $this->expert_model->get_solves ( 0, 15 );
//代码的页面实现include template ( 'expert' );
相关推荐
- 一个基于.Net Core遵循Clean Architecture原则开源架构
-
今天给大家推荐一个遵循CleanArchitecture原则开源架构。项目简介这是基于Asp.netCore6开发的,遵循CleanArchitecture原则,可以高效、快速地构建基于Ra...
- AI写代码翻车无数次,我发现只要提前做好这3步,bug立减80%
-
写十万行全是bug之后终于找到方法了开发"提示词管理助手"新版本那会儿,我差点被bug整崩溃。刚开始两周,全靠AI改代码架构,结果十万行程序漏洞百出。本来以为AI说没问题就稳了,结果...
- OneCode低代码平台的事件驱动设计:架构解析与实践
-
引言:低代码平台的事件驱动范式在现代软件开发中,事件驱动架构(EDA)已成为构建灵活、松耦合系统的核心范式。OneCode低代码平台通过创新性的注解驱动设计,将事件驱动理念深度融入平台架构,实现了业务...
- 国内大厂AI插件评测:根据UI图生成Vue前端代码
-
在IDEA中安装大厂的AI插件,打开ruoyi增强项目:yudao-ui-admin-vue31.CodeBuddy插件登录腾讯的CodeBuddy后,大模型选择deepseek-v3,输入提示语:...
- AI+低代码技术揭秘(二):核心架构
-
本文档介绍了为VTJ低代码平台提供支持的基本架构组件,包括Engine编排层、Provider服务系统、数据模型和代码生成管道。有关UI组件库和widget系统的信息,请参阅UI...
- GitDiagram用AI把代码库变成可视化架构图
-
这是一个名为gitdiagram的开源工具,可将GitHub仓库实时转换为交互式架构图,帮助开发者快速理解代码结构。核心功能一键可视化:替换GitHubURL中的"hub...
- 30天自制操作系统:第六天:代码架构整理与中断处理
-
1.拆开bootpack.c文件。根据设计模式将对应的功能封装成独立的文件。2.初始化pic:pic(可编程中断控制器):在设计上,cpu单独只能处理一个中断。而pic是将8个中断信号集合成一个中断...
- AI写代码越帮越忙?2025年研究揭露惊人真相
-
近年来,AI工具如雨后春笋般涌现,许多人开始幻想程序员的未来就是“对着AI说几句话”,就能轻松写出完美的代码。然而,2025年的一项最新研究却颠覆了这一期待,揭示了一个令人意外的结果。研究邀请了16位...
- 一键理解开源项目:两个自动生成GitHub代码架构图与说明书工具
-
一、GitDiagram可以一键生成github代码仓库的架构图如果想要可视化github开源项目:https://github.com/luler/reflex_ai_fast,也可以直接把域名替换...
- 5分钟掌握 c# 网络通讯架构及代码示例
-
以下是C#网络通讯架构的核心要点及代码示例,按协议类型分类整理:一、TCP协议(可靠连接)1.同步通信//服务器端usingSystem.Net.Sockets;usingTcpListene...
- 从复杂到优雅:用建造者和责任链重塑代码架构
-
引用设计模式是软件开发中的重要工具,它为解决常见问题提供了标准化的解决方案,提高了代码的可维护性和可扩展性,提升了开发效率,促进了团队协作,提高了软件质量,并帮助开发者更好地适应需求变化。通过学习和应...
- 低代码开发当道,我还需要学习LangChain这些框架吗?| IT杂谈
-
专注LLM深度应用,关注我不迷路前两天有位兄弟问了个问题:当然我很能理解这位朋友的担忧:期望效率最大化,时间用在刀刃上,“不要重新发明轮子”嘛。铺天盖地的AI信息轰炸与概念炒作,很容易让人浮躁与迷茫。...
- 框架设计并不是简单粗暴地写代码,而是要先弄清逻辑
-
3.框架设计3.框架设计本节我们要开发一个UI框架,底层以白鹭引擎为例。框架设计的第一步并不是直接撸代码,而是先想清楚设计思想,抽象。一个一个的UI窗口是独立的吗?不是的,...
- 大佬用 Avalonia 框架开发的 C# 代码 IDE
-
AvalonStudioAvalonStudio是一个开源的跨平台的开发编辑器(IDE),AvalonStudio的目标是成为一个功能齐全,并且可以让开发者快速使用的IDE,提高开发的生产力。A...
- 轻量级框架Lagent 仅需20行代码即可构建自己的智能代理
-
站长之家(ChinaZ.com)8月30日消息:Lagent是一个专注于基于LLM模型的代理开发的轻量级框架。它的设计旨在简化和提高这种模型下代理的开发效率。LLM模型是一种强大的工具,可以...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- 知识框架图 (52)
- ppt框架 (55)
- 框架图模板 (59)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)