discuz 学习


 

Discuz! X是腾讯旗下康盛公司(Comsenz)推出的一个以社区为基础的专业建站平台,让论坛(BBS)、社交网络(SNS)、门户(Portal)、群组(Group)、开放平台(Open Platform)应用充分融合于一体,帮助网站实现一站式服务,在国内应用很普遍,是非常成熟的建站应用。学习discuz不仅对于php web者有重要的指导意义,对java web搭建完善的建站系统也有重要的学习和参考价值,并且很多界面元素可以直接应用。我们以Discuz!x3.2为基础,初步学习一下它的源码。

 

一 、目录结构

Discuz!x虽然然目录和文件都很多,但是实际上结构还是很清晰,大多数情况下通过文件名和目录就能知道某个文件的作用。比如:

    \source\class\discuz\discuz_censor.php  用来处理敏感词过滤的类

     \source\function\function_credit.php  处理积分操作的函数库

     \source\module\forum\forum_viewthread.php 处理帖子显示页面的模块

另外,source目录下的classfunctionmoduleincludeadmincp这几个文件夹下的程序文件命名要遵守如下规则:文件名前缀为所在目录的名字加上下划线(_目录结构详细:

/┬── api 外部接口
 │      ├── connect        腾讯互联
 │      ├── db    UCenter数据库备份接口
 │      ├── google         Google引擎使用
 │      ├── javascript     数据和广告的 JS调用
 │      ├── manyou         manyou应用及搜索等相关服务
 │      └── trade 在线支付接口
 ├── archiver      论坛静态化
 ├── config        站点配置文件
 ├── data 数据缓存及附件
 │      ├── attachment     上传的文件目录
 │      │      ├── album  相册专用
 │      │      ├── block  DIY专用
 │      │      ├── common 公共上传
 │      │      ├── forum  论坛附件专用
 │      │      ├── group  群组图标和头部图片专用
 │      │      ├── portal 门户上传文件专用
 │      │      ├── profile         个人资料专用
 │      │      └── temp   临时文件
 │      ├── avatar         视频认证专用
 │      ├── backup         站点数据备份
 │      ├── cache 数据缓存
 │      ├── diy   DIY模块缓存
 │      ├── ipdata         Discuz!IP
 │      ├── log   站点日志,前/后台管理日志、错误日志等
 │      ├── plugindata     插件缓存数据
 │      ├── template       模板缓存目录
 │      └── threadcache    帖子缓存
 ├── install 安装目录
 ├── source 代码主目录
 │      ├── admincp        后台程序
 │      │      ├── cloud  Discuz!云平台
 │      │      ├── menu   菜单
 │      │      └── moderate        审核功能
 │      ├── archiver       论坛静态化功能代码
 │      ├── class 类文件目录
 │      │      ├── adv    站点广告功能
 │      │      ├── block  DIY模块功能文件
 │      │      ├── cache  缓存类
 │      │      ├── db     数据库类
 │      │      ├── discuz discuz
 │      │      ├── forum  论坛
 │      │      ├── helper 存放从function_core分离出来的一部分函数
 │      │      ├── lib    工具类的集合类
 │      │      ├── magic  道具
 │      │      ├── memory 内存类
 │      │      ├── secqaa 验证问答
 │      │      ├── table  数据表操作类
 │      │      └── task   站点任务功能
 │      ├── function       函数文件
 │      │      └── cache  缓存功能拆分目录
 │      ├── include        被包含的文件
 │      │      ├── collection      淘帖
 │      │      ├── cron   计划任务
 │      │      ├── misc   杂项
 │      │      ├── modcp  前台论坛管理
 │      │      ├── portalcp        前台门户管理
 │      │      ├── post   帖子相关
 │      │      ├── search 搜索功能
 │      │      ├── space  家园和个人相关功能
 │      │      ├── spacecp         个人设置相关
 │      │      ├── table  编码转换数据
 │      │      ├── thread 查看主题相关
 │      │      └── topicadmin      前台主题管理
 │      ├── language       站点语言包
 │      │      ├── adv    广告
 │      │      ├── block  DIY模块
 │      │      ├── forum  论坛
 │      │      ├── group  群组
 │      │      ├── home   家园
 │      │      ├── magic  道具
 │      │      ├── member 登录注册页面语言
 │      │      ├── mobile 手机访问功能语言
 │      │      ├── portal 门户语言
 │      │      ├── ranklist        排行榜语言
 │      │      ├── search 搜索
 │      │      ├── secqaa 安全问答
 │      │      ├── tag    标签
 │      │      ├── task   任务
 │      │      └── userapp         manyou应用
 │      ├── module         功能模块
 │      │      ├── connect         腾讯互联
 │      │      ├── forum  论坛
 │      │      ├── group  群组
 │      │      ├── home   家园
 │      │      ├── member 登录注册
 │      │      ├── misc   杂项
 │      │      ├── portal 门户
 │      │      ├── search 搜索
 │      │      └── userapp         应用
 │      └── plugin         插件目录
 │              ├── cloudstat       Discuz!云平台
 │              ├── myapp  Manyou应用
 │              ├── myrepeats       马甲功能
 │              ├── qqconnect       腾讯互联
 │              └── soso_smilies    腾讯搜搜表情
 ├── static        非PHP文件
 │      ├── image 界面图片
 │      ├── js    站点JS脚本
 │      ├── space 空间皮肤
 │      └── topic 门户皮肤
 ├── template      模板目录
 │      └── default        默认风格
 ├── uc_client     UCenter客户端程序
 └── uc_server     UCenter服务端程序

 

二、重要表结构

 

pre_common_addon 插件扩展中心服务商表

pre_common_admincp_cmenu 后台管理面板,自定义常用菜单表

pre_common_admincp_group 后台团队职务名称表

pre_common_admincp_member 后台管理员成员表

pre_common_admincp_perm 后台团队职务权限分配表

pre_common_admincp_session 后台管理面板登录session表

pre_common_admingroup 后台管理组权限分配表

pre_common_adminnote 管理团队留言表

pre_common_advertisement 广告位管理表

pre_common_advertisement_custom 广告位自定义名称

pre_common_banned 禁止IP表

pre_common_block DIY模块表

pre_common_block_favorite DIY模块收藏表:门户管理的模块管理里使用

pre_common_block_item DIY模块属性表

pre_common_block_item_data DIY模块数据表

pre_common_block_permission DIY模块权限表

pre_common_block_pic DIY模块图片表

pre_common_block_style DIY模块风格表

pre_common_block_xml 模块XML扩展类数据表

pre_common_cache 公用缓存表

pre_common_card 充值卡表

pre_common_connect_guest QQ互联游客表

pre_common_credit_log 积分记录表

pre_common_credit_log_field 积分记录详细信息 3.0版本增加

pre_common_credit_rule 积分策略表

pre_common_credit_rule_log 积分策略生效记录

pre_common_credit_rule_log_field 积分策略生效记录扩展

pre_common_cron 计划任务表

pre_common_devicetoken 设备数据表 3.0增加

pre_common_district 地区列表

pre_common_diy_data DIY数据表

pre_common_domain 应用域名分配表

pre_common_failedlogin 普通登录失败日志表

pre_common_friendlink 友情链接表

pre_common_grouppm 群发短信列表内容

pre_common_invite 邀请码表

pre_common_magic 道具表

pre_common_magiclog 道具日志表

pre_common_mailcron 邮件计划任务表

pre_common_mailqueue 邮件发送队列表

pre_common_member 用户表,密码是随机生成记录,实际记录在UCenter

 pre_common_member_action_log 用户表操作日志表

pre_common_member_connect 用户QQ互联表

pre_common_member_count 用户数据统计表

pre_common_member_crime 用户惩罚操作表

pre_common_member_field_forum 用户论坛设置表

pre_common_member_field_home 用户家园设置表

pre_common_member_forum_buylog 论坛购买日志

pre_common_member_grouppm 用户群发消息状态表

pre_common_member_log 用户操作日志表

pre_common_member_magic 用户道具配置表

pre_common_member_medal 用户勋章表

pre_common_member_newprompt 用户新提醒表

pre_common_member_profile 用户个人信息表

pre_common_member_profile_setting 用户个人信息设置表

pre_common_member_security 个人信息修改审核

pre_common_member_stat_field 用户状态字段表

pre_common_member_status 用户状态表

pre_common_member_validate 用户认证审核

pre_common_member_verify 用户认证设置

pre_common_member_verify_info 用户认证信息

pre_common_moderate 审核数据表

pre_common_myapp 漫游应用表

pre_common_myapp_count 漫游应用数据统计表

pre_common_myinvite 漫游邀请表

pre_common_mytask 用户任务表

pre_common_nav 导航菜单表

pre_common_onlinetime 在线时间表

pre_common_optimizer 优化表

pre_common_patch 漏洞补丁表

pre_common_plugin 插件表

pre_common_pluginvar 插件参数表

pre_common_process 高速缓存表

pre_common_regip 注册IP表,防重复注册 最多五次

pre_common_relatedlink 相关链接

pre_common_report 举报表

pre_common_searchindex 搜索索引表

pre_common_secquestion 密码问答问题表

pre_common_session 用户登录session表

pre_common_setting 网站设置参数表

pre_common_smiley 表情表

pre_common_sphinxcounter sphinx搜索程序用表

pre_common_stat 统计表

pre_common_statuser 统计用户表

pre_common_style 风格表

pre_common_stylevar 风格参数表

pre_common_syscache 系统参数缓存表

pre_common_tag tag表

pre_common_tagitem tag内容表

pre_common_task 用户任务表

pre_common_taskvar 任务参数表

pre_common_template 模板表

pre_common_template_block 模板模块表

pre_common_template_permission 模板权限表

pre_common_uin_black UIN 黑名单

pre_common_usergroup 用户组表

pre_common_usergroup_field 用户组权限表

pre_common_usergroup_field 用户组权限表

pre_common_visit 访问表

pre_common_word_type 敏感词类型表

pre_connect_disktask 磁盘任务

pre_connect_feedlog Connect feed日志表

pre_connect_memberbindlog Connect 用户绑定/解绑记录表

pre_connect_postfeedlog Connect 回帖帖feed日志

pre_connect_tthreadlog Connect 发帖帖帖feed日志

pre_connect_tlog 微博日志表

pre_forum_access 论坛访问权限单独设置表

pre_forum_activity 论坛活动表

pre_forum_activityapply 论坛活动报名表

pre_forum_announcement 论坛公告表

pre_forum_attachment 1.5 = 论坛附件表, x2 = 附件索引表

pre_forum_attachment_0 附件表(x2),用了分表即表名最后一位数字 = 附件tid的最后一位

pre_forum_attachmentfield 论坛附件扩展表(x2以去除)

pre_forum_attachment_exif 论坛附件exif信息表

pre_forum_attachment_unused 未使用的附件表

pre_forum_attachtype 论坛附件类型表

pre_forum_bbcode 论坛UBBCODE表

pre_forum_collection 淘帖专辑表

pre_forum_collectioncomment 淘帖评论表

pre_forum_collectionfollow 淘帖订阅表

pre_forum_collectioninvite 邀请管理淘专辑表

pre_forum_collectionrelated 淘帖主题被收入专辑表

pre_forum_collectionteamworker 淘帖合作编辑表

pre_forum_collectionthread 淘帖包含主题表

pre_forum_creditslog 论坛积分日志表

pre_forum_debate 辩论主题表

pre_forum_debatepost 辩论帖子表

pre_forum_faq 常见问答表

pre_forum_filter_post 过滤回帖表

pre_forum_forum 论坛板块表

pre_forum_forumfield 论坛板块设置表

pre_forum_forumrecommend 版块推荐帖表

pre_forum_forum_threadtable 主帖表

pre_forum_groupcreditslog 群组积分日志

pre_forum_groupfield 群组表

pre_forum_groupinvite 群组邀请表

pre_forum_grouplevel 群组级别表

pre_forum_groupuser 群组用户表

pre_forum_hotreply_member 火热回复用户表

pre_forum_hotreply_number 火热回复数字表

pre_forum_imagetype 图像类型表

pre_forum_medal 勋章表

pre_forum_medallog 勋章发放日志表

pre_forum_memberrecommend 用户推荐表

pre_forum_moderator 版主表

pre_forum_modwork 版主工作表

pre_forum_newthread 论坛新主题表

pre_forum_onlinelist 论坛在线列表

pre_forum_order 论坛订单表

pre_forum_poll 论坛投票帖表

pre_forum_polloption 论坛投票选项表

pre_forum_polloption_image 投票选项图片表

pre_forum_pollvoter 论坛投票用户表

pre_forum_post 论坛回复表

pre_forum_postcomment 帖子评论表

pre_forum_postlog 回复日志表

pre_forum_postposition 回复楼层表

pre_forum_poststick 回复置顶到主题帖表

pre_forum_post_moderate 论坛回复管理表

pre_forum_post_location 论坛回复地理信息位置表

pre_forum_post_tableid 分表后回复帖的ID

pre_forum_postcache 论坛回复缓存表

pre_forum_postcomment 论坛回复点评表

pre_forum_postlog 论坛回复日志表

pre_forum_poststick 论坛回复插入

pre_forum_promotion 网站推广表

pre_forum_ratelog 打分日志表

pre_forum_relatedthread 相关帖子表

pre_forum_rsscache RSS缓存表

pre_forum_sofa 论坛沙发表

pre_forum_spacecache 空间信息缓存表

pre_forum_statlog 论坛统计日志

pre_forum_thread 主帖列表

pre_forum_threadpreview 主帖预览表

pre_forum_threadprofile 帖子信息表

pre_forum_threadprofile_group 帖子信息组表

pre_forum_threadcalendar 帖子日历表

pre_forum_thread_moderate 主题管理表

pre_forum_threadaddviews 帖子查看数字表

pre_forum_threadclass 帖子分类表

pre_forum_threadclosed 帖子关闭表

pre_forum_threaddisablepos 帖子取消表

pre_forum_threadhot 火热主题表

pre_forum_threadimage 主题图片表

pre_forum_threadlog 主题日志表

pre_forum_threadmod 主题管理记录表

pre_forum_threadtype 主题分类信息表

pre_forum_trade 商品帖数据表

pre_forum_tradecomment 商品帖评论

pre_forum_tradelog 商品帖交易日志

pre_forum_typeoption 类型选项

pre_forum_typeoptionvar 类型选项参数

pre_forum_typevar 类型参数

pre_forum_warning 警告表

pre_home_album 家园相册表

pre_home_album_category 家园相册分类表

pre_home_appcreditlog 家园应用积分日志

pre_home_blacklist 家园黑名单表

pre_home_blog 家园博客表

pre_home_blogfield 家园博客内容表

pre_home_blog_category 家园博客分类表

pre_home_blog_moderate 家园日志管理表

pre_home_class 日志个人分类表

pre_home_click 对日志和图片表态动作

pre_home_clickuser 静态用户表

pre_home_comment 家园评论表

pre_home_comment_moderate 家园评论留言管理表

pre_home_docomment 家园记录回复表

pre_home_doing 家园记录表

pre_home_doing_moderate 家园记录管理表

pre_home_favorite 家园收藏表

pre_home_feed 家园动态表

pre_home_feed_app 漫游APP动态表

pre_home_follow 家园收听表

pre_home_follow_feed 收听FEED表

pre_home_follow_feed_archiver 收听归档表

pre_home_friend 家园好友表

pre_home_friendlog 好友日志表

pre_home_friend_request 好友请求表

pre_home_notification 通知消息

pre_home_pic 家园图片表

pre_home_pic_moderate 家园日志管理表

pre_home_picfield 相册相关信息表

pre_home_poke 打招呼表

pre_home_pokearchive 打招呼归档

pre_home_share 分享表

pre_home_share_moderate 家园分享管理表

pre_home_show 上榜宣言

pre_home_specialuser 明星会员表

pre_home_userapp 漫游APP

 pre_home_userappfield 漫游APP

 pre_home_userapp_stat 漫游APP统计

pre_home_viewlog 日志和用户访问记录表

pre_home_visitor 最近访客记录表

pre_home_follow 广播收听表

pre_home_follow_feed 广播表

pre_home_follow_feed_archiver 广播归档表

pre_mobile_setting 手机设置表

pre_portal_article_content 文章内容表

pre_portal_article_count 文章计数表

pre_portal_article_moderate 门户文章管理表

 

表数据举例:

 

 

 

三 、全局变量 $_G

 

在dx中,程序大部分就使用了同样一个变量,那就是$_G,这个变量无论是在程序代码

中或是在模板中都会用到,我们也常成为G变量,是一些系统最频繁用到的相关的全局

信息,主要是为了后面对各功能实现的便利性。例如我要得知当前用户的UID,那我直接

读取$_G['uid']就行了,而不用再二次查询session或者数据库,这样可以提高效率,编写

其余的各模块程序,代码量也会变得非常简洁。 

1.      定义及初始化

在discuz_application.php中_init_env定义了这个变量以及对它初始化

global $_G;

                   $_G= array(

                            'uid'=> 0,

                            'username'=> '',

                            'adminid'=> 0,

                            'groupid'=> 1,

                            'sid'=> '',

                            'formhash'=> '',

                            'connectguest'=> 0,

                            'timestamp'=> TIMESTAMP,

                            'starttime'=> microtime(true),

                            'clientip'=> $this->_get_client_ip(),

                            'remoteport'=> $_SERVER['REMOTE_PORT'],

                            'referer'=> '',

                            'charset'=> '',

                            'gzipcompress'=> '',

                            'authkey'=> '',

                            'timenow'=> array(),

                            'widthauto'=> 0,

                            ……

 

  2. 部分成员

$_G['uid'] =>当前登录UID

$_G['username']=> 当前登录用户名

$_G['adminid']=> 当前登录ID管理组ID

$_G['groupid']=> 当前登录ID用户组ID

$_G['cookie']=> 客户端cookie

$_G['formhash']=> 当前登录ID的【FORMHASH主要用于表单提交

$_G['timestamp']=> 当前活动时间

$_G['starttime']=> 1317042440.3242

$_G['clientip']=> 当前访问者IP地址

$_G['referer']=> 当前请求的地址,主要用户表单提交

$_G['charset']=> 程序编码

$_G['PHP_SELF']=> 当前访问页面的相对地址

$_G['siteurl']=> 程序访问地址

$_G['siteroot']=> 程序所在域名的相对目录

$_G['fid'] =>当前版块id【主题列表页、帖子页】出现

 

3.部分风格变量

$_G['style']=> Array

$_G['style'][styleid]=> 当前风格ID

$_G['style'][name]=> 当前风格名

$_G['style'][templateid]=> 当前模板体系

$_G['style'][tpldir]=> 当前模板目录

$_G['style'][menuhoverbgcolor]=> 导航菜单高亮背景颜色

$_G['style'][lightlink]=> 浅色链接颜色

$_G['style'][floatbgcolor]=> 弹出窗口背景属性

 

forum.php代码

forum.php是论坛的主页面,我们学习一下它的主要流程:

<?php

 

/**

 *     [Discuz!] (C)2001-2099 Comsenz Inc.

 *     This is NOT a freeware, use is subject to license terms

 *

 *      $Id:forum.php 33828 2013-08-20 02:29:32Z nemohou $

 */

//定义应用ID

define('APPTYPEID',2);

// //定义当前应用脚本名称

define('CURSCRIPT','forum');

 

//基础文件引入 discuz核心类 ,几乎所有模块使用

require'./source/class/class_core.php';

//论坛通用函数集

require'./source/function/function_forum.php';

 

//模块定义,模块数组

$modarray =array('ajax','announcement','attachment','forumdisplay',

      'group','image','index','medal','misc','modcp','notice','post','redirect',

     'relatekw','relatethread','rss','topicadmin','trade','viewthread','tag',

'collection','guide');

//模块缓存定义,模块缓存hash

$modcachelist =array(

'index'           =>array('announcements', 'onlinelist', 'forumlinks',

            'heats','historyposts', 'onlinerecord', 'userstats', ' diytemplatenameforum'),

      'forumdisplay'       => array('smilies', 'announcements_forum', 'globalstick',

'forums', 'onlinelist', 'forumstick', 'threadtable_info','threadtableids', 'stamps',

'diytemplatenameforum'),

      'viewthread'   => array('smilies', 'smileytypes', 'forums', 'usergroups',

      'stamps', 'bbcodes', 'smilies',     'custominfo', 'groupicon', 'stamps',

      'threadtableids', 'threadtable_info','posttable_info', 'diytemplatenameforum'),

      'redirect' =>array('threadtableids', 'threadtable_info', 'posttable_info'),

       'post'             => array('bbcodes_display','bbcodes', 'smileycodes', 'smilies',

'smileytypes', 'domainwhitelist', 'albumcategory'),

      'space'          =>array('fields_required', 'fields_optional', 'custominfo'),

      'group'          =>array('grouptype', 'diytemplatenamegroup'),

);

//合法性判断

$mod =!in_array(C::app()->var['mod'], $modarray) ? 'index' :C::app()->var['mod'];

//$mod的值定义给常量CURMODULE,论坛及模板解析时会用到

define('CURMODULE',$mod);

$cachelist =array();

if(isset($modcachelist[CURMODULE])){

      $cachelist = $modcachelist[CURMODULE];

 

      $cachelist[] = 'plugin';

      $cachelist[] = 'pluginlanguage_system';

}

//判断coreapp方法返回的对象中的var数组中键位mod的元素值是否等于group

//第一次var['mod']的值应该为null

if(C::app()->var['mod']== 'group') {

      $_G['basescript'] = 'group';

}

C::app()->cachelist= $cachelist;

//初始化,Init函数包含了init db,memory,user,session,setting,cron

C::app()->init();

//重要函数,获取论坛数据,查数据库

loadforum();

 

set_rssauth();

//插件加载函数

runhooks();

 

$navtitle =str_replace('{bbname}', $_G['setting']['bbname'],$_G['setting']['seotitle']['forum']);

$_G['setting']['threadhidethreshold']= 1;

require DISCUZ_ROOT.'./source/module/forum/forum_'.$mod.'.php';

 

?>

 

 

五 一个利用discuz api的例子

 

下面我用一个

 

<?

//这个只是获取当前用户账号以及积分的方法

 

require './source/class/class_core.php';//引入系统核心文件

$discuz = & discuz_core::instance();//以下代码为创建及初始化对象

$discuz->cachelist = $cachelist;

$discuz->init();//以上是调用discuz公共执行类等核心代码

$discuz_user= $_G['username'];

echo "current user:".$discuz_user;

 

$connect=mysql_pconnect("localhost","root","wang");//mysql数据库域名,账户,密码

if(!mysql_select_db('ultrax',$connect))//discuz 数据库名

echo ("数据库连接失败!");

//构造查询的SQL语句,查询积分

$sql="SELECT * FROM pre_common_memberWHERE username='".$discuz_user."'";

$res = mysql_query($sql);//执行查询语句

$row=mysql_fetch_assoc($res);//将结果转换成数组

echo " credits:".$row["credits"];//显示积分字段credits的内容

echo mysql_error();//发生错误后显+示错误信息

?>

运行结果:

 

参考:

数据表:    http://blog.csdn.net/quweiie/article/details/38636331

相关知识:  http://blog.csdn.net/yanhui_wei/article/details/24967399

论坛入口forum : http://blog.sina.com.cn/s/blog_5e2308c80101m9a1.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值