Discuz X论坛二开速查文档
前言
公司最近要做一个论坛的小程序,没找到合适的就想用discuz
进行二开
要购买一套主题,选用themebox
的:https://bbs.themebox.cn/portal.php?mobile=2
一、数据库操作
所有的用户输入数据都建议先使用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.php | UCenter 通信文件 |
/api/addons | 应用中心 |
/api/connect | 通讯互联 |
/api/google | Google引擎结构处理 |
/api/javascript | 数据和广告的js调用 |
/api/manyou | manyou应用及搜索等相关服务 |
/api/remote | 远程更新 |
/api/trade | 支付宝、财付通等交易接口 |
archiver: 论坛Archiver静态化目录
config: 论坛配置文件目录
文件名 | 功能 |
---|---|
config_global.php | 论坛核心参数配置文件 |
config_ucenter.php | UCenter核心参数配置文件 |
data: 论坛数据缓存目录
文件名 | 功能 |
---|---|
install | 论坛安装目录 |
source | 程序后端功能处理目录 |
discuz_version.php | 程序版本号文件 |
source: 程序核心目录
文件名 | 功能 |
---|---|
/source/admincp | 后台管理 |
/source/archiver | 论坛archiver静态化程序目录 |
/source/class | 核心类库 |
/source/function | discuzX自定义函数库 |
/source/include | 程序功能组件目录 |
/source/language | 程序语言包(kv结构) |
/source/module | 程序功能模块程序包 |
/source/plugin | 插件扩展目录 |
static: 程序资源目录(头像、图片、下载文件、js文件等等)
template:前端模板目录
文件名 | 功能 |
---|---|
/default/common | 基础css文件、header、footer等公共引入文件 |
/default/collage | 大学计划页面 |
/default/dige | dige专区页面 |
/default/forum | 首页、帖子页面 |
/default/member | 会员页面 |
/default/home | 家园页面 |
/default/group | 群组页面 |
/default/mobile | 移动端页面 |
/default/portal | 文章页面 |
/default/search | 搜索页面 |
uc_client: UCenter客户端目录
文件名 | 功能 |
---|---|
/uc_client/control | UC业务处理操作类 |
/uc_client/data | 缓存文件目录 |
/uc_client/lib | 类库目录(包括数据库操作类,XML类,UCCODE类,邮件发送类) |
/uc_client/model | UC业务模型类 |
uc_server | UCenter服务端 后台ucenter功能实现目录 |
根目录文件
文件名 | 功能 |
---|---|
admin.php | 后台入口文件 |
api.php | API输出 入口文件 |
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
这里自定义的广告位于pre_common_advertisement_custom
要查某一个类型下的所有文章可以通过名字来获取到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
字段,需要拼接判断
// 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
评论 (0)