调用博主最近登录时间
生活中的HYGGE
Discuz X论坛二开速查文档
PHP

Discuz X论坛二开速查文档

hygge
2024-04-06 / 0 评论 / 102 阅读 / 正在检测是否收录...

Discuz X论坛二开速查文档

前言

公司最近要做一个论坛的小程序,没找到合适的就想用discuz进行二开

要购买一套主题,选用themebox的:https://bbs.themebox.cn/portal.php?mobile=2

lunrvitz.png

一、数据库操作

所有的用户输入数据都建议先使用daddslashes函数处理,以防止SQL注入攻击。

1.1 常用API

函数功能
DB::table($tablename)获取正确带前缀的表名。
DB::delete($tablename, 条件,条数限制)删除表中的数据
DB::insert($tablename, 数据(数组),是否返回插入ID,是否是替换式,是否silent)插入数据操作
DB::update($tablename, 数据(数组)条件)更新操作
DB::fetch(查询后的资源)从结果集中取关联数组,注意如果结果中的两个或以上的列具有相同字段名,最后一列将优先。
DB::fetch_first($sql)取查询的第一条数据fetch
DB::fetch_all($sql)查询并fetch
DB::result_first($sql)查询结果集的第一个字段值
DB::query($sql)普通查询
DB::num_rows(查询后的资源)获得记录集总条数
DB::_execute(命令,参数)执行mysql类的命令
DB::limit(n,n)返回限制字串
DB::field(字段名, $pid)返回条件,如果为数组则返回 in 条件
DB::order(别名, 方法)排序
注意:由于 X1.5 里增加了SQL的安全性检测。因此,如果你的SQL语句里包含以下开头的函数 load_file,hex,substring,if,ord,char。 或者包含以下操作 intooutfile,intodumpfile,unionselect,(select')都将被拒绝执行。

1.2 格式化参数

替换参数功能
%t表名
%s字串,如果是数组就序列化
%f按 %F 的样式格式化字串
%d整数
%i不做处理
%n若为空即为0,若为数组,就用',' 分割,否则加引号

1.3 C对象

方法名参数返回值说明
C::t($tablename)->insert()数据数组新插入记录的 ID 或影响行数插入一条新记录到数据表
C::t($tablename)->update()条件,更新数据影响行数根据条件更新记录
C::t($tablename)->delete()条件影响行数根据条件删除记录
C::t($tablename)->fetch()条件单条记录的数组根据条件获取一条记录
C::t($tablename)->fetch_all()条件所有符合条件的记录的数组根据条件获取多条记录
C::t($tablename)->count()条件记录数根据条件统计记录数
C::t($tablename)->truncate() 清空表
C::t($tablename)->fetch_all_field() fetch所有的字段名
C::t($tablename)->optimize() 优化表

二、Discuz源码结构

DISCUZ使用自己的框架,与现在主流的web框架不同,DISCUZ没有路由表,他的路由是由入口文件来实现的。

2.1 目录讲解

api: Discuz 论坛和其他系统的接口文件

文件名功能
uc.phpUCenter 通信文件
/api/addons应用中心
/api/connect通讯互联
/api/googleGoogle引擎结构处理
/api/javascript数据和广告的js调用
/api/manyoumanyou应用及搜索等相关服务
/api/remote远程更新
/api/trade支付宝、财付通等交易接口

archiver: 论坛Archiver静态化目录
config: 论坛配置文件目录

文件名功能
config_global.php论坛核心参数配置文件
config_ucenter.phpUCenter核心参数配置文件

data: 论坛数据缓存目录

文件名功能
install论坛安装目录
source程序后端功能处理目录
discuz_version.php程序版本号文件

source: 程序核心目录

文件名功能
/source/admincp后台管理
/source/archiver论坛archiver静态化程序目录
/source/class核心类库
/source/functiondiscuzX自定义函数库
/source/include程序功能组件目录
/source/language程序语言包(kv结构)
/source/module程序功能模块程序包
/source/plugin插件扩展目录

static: 程序资源目录(头像、图片、下载文件、js文件等等)
template:前端模板目录

文件名功能
/default/common基础css文件、header、footer等公共引入文件
/default/collage大学计划页面
/default/digedige专区页面
/default/forum首页、帖子页面
/default/member会员页面
/default/home家园页面
/default/group群组页面
/default/mobile移动端页面
/default/portal文章页面
/default/search搜索页面

uc_client: UCenter客户端目录

文件名功能
/uc_client/controlUC业务处理操作类
/uc_client/data缓存文件目录
/uc_client/lib类库目录(包括数据库操作类,XML类,UCCODE类,邮件发送类)
/uc_client/modelUC业务模型类
uc_serverUCenter服务端 后台ucenter功能实现目录

根目录文件

文件名功能
admin.php后台入口文件
api.phpAPI输出 入口文件
connect.php云平台接口文件
forum.php帖子信息入口文件
group.php群组入口文件
home.php家园入口文件
index.php首页
member.php用户入口文件(登录、注册、退出等)
misc.php程序杂项扩展入口
plugin.php插件入口文件
portal.php门户入口文件
robots.txt搜索引擎限制文件
search.php搜索频道入口文件

2.2 运行逻辑

discuz的入口文件起到了路由的作用。一个标准的discuz请求如下:http://localhost/home.php?mod=space&uid=1&do=profile

三、广告

3.1、获取自定义广告下的所有item

lurqrvlp.png

这里自定义的广告位于pre_common_advertisement_custom

lurqrzn2.png

要查某一个类型下的所有文章可以通过名字来获取到id

// 1.首先查询pre_common_advertisement_custom表获取name为小程序的id
$adid = DB::result_first("SELECT id FROM " . DB::table('common_advertisement_custom') . " WHERE name = '小程序'");

再根据id查询pre_common_advertisement表,关联字段位于parameters字段,需要拼接判断

lurqs4sd.png

// 2.查询pre_common_advertisement表获取广告信息
$flag = ':"' . $adid . '";}s:';
$ad = DB::fetch_all("SELECT parameters FROM " . DB::table('common_advertisement') . " WHERE available = '1' AND parameters LIKE '%$flag%'");

$adresult = [];
// 3.将所有的code存入数组
foreach ($ad as $key => $value) {
    $unse = unserialize($value['parameters']);
    $adresult[] = [
        'link' => $unse['link'],
        'url' => $unse['url']
    ];
}

序列化的内容为:

array(9) {
  ["extra"]=>
  array(1) {
    ["customid"]=>
    string(1) "1"
  }
  ["style"]=>
  string(5) "image"
  ["link"]=>
  string(9) "baidu.com"
  ["alt"]=>
  string(0) ""
  ["width"]=>
  string(0) ""
  ["height"]=>
  string(0) ""
  ["url"]=>
  string(67) "https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"
  ["html"]=>
  string(130) ""
  ["displayorder"]=>
  string(0) ""
}

引用

1.主题盒子官网:https://www.themebox.cn/

2.主题盒子Themebox演示站:https://bbs.themebox.cn/portal.php?mobile=2

3.黄聪:Discuz!X/数据库操作方法、DB::table、C::t :https://www.cnblogs.com/huangcong/p/4080179.html

4.全栈程序员站长:https://cloud.tencent.com/developer/user/8223537

0

评论 (0)

取消