下面是Discuz! 的文件目录及对应的描述。日常的开发中主要会涉及到source和template目录。虽然目录和文件都很多,但是实际上结构还是很清晰,大多数情况下通过文件名和目录就能知道某个文件的作用。比如:
\source\class\discuz\discuz_censor.php 用来处理敏感词过滤的类
\source\function\function_credit.php 处理积分操作的函数库
\source\module\forum\forum_viewthread.php 处理帖子显示页面的模块
另外,source目录下的class、function、module、include、admincp这几个文件夹下的程序文件命名要遵守如下规则:文件名前缀为所在目录的名字加上下划线(_)目录结构详细:
$_config['input']['compatible'] = 1;// $_GET|$_POST的兼容处理,0为关闭,1为开启;开启后即可使用$_G['gp_xx'](xx为变量名,$_GET和$_POST集合的所有变量 名),值为已经addslashes()处理过,兼容插件;
//例:查询10个用户uid大于100的用户数据,以uid为返回结果数组的key $arr = DB::fetch_all('SELECT * FROM %t WHERE uid>%d LIMIT %d', array('common_member', '100', '10'), 'uid');支持的fomat有:
%t |
DB::table() |
%d |
intval() |
%s |
addslashes() |
%n |
in IN (1,2,3) |
%f |
sprintf('%f', $var) |
%i |
直接使用不进行处理 |
表名:mytablename 目录:source/plugin/mypluginid/table/table_mytablename.php 类名:table_mytablename 用法:C::t('#mypluginid#mytablename')->method();
Discuz! X2.5 拥有完善的模版机制,支持模版和程序的分离,方便模版风格的扩展开发。Discuz! X2.5 拥有完善的模版机制,支持模版和程序的分离,方便模版风格的扩展开发。
通常模版文件存放在template目录下,文件格式为 htm。在加载模版的时候通常就是简单的一句:
Discuz! X2.5 的 config_global.php 中有这样一行代码
这就是 Discuz! 内置的缓存方式,如果填写 'sql' 则为使用数据库缓存,填写 'file' 则为使用文件缓存。
缓存层的引入是为了解决MYSQL自身对高并发处理的性能瓶颈,目前产品缓存层采用主流的Key-Value对形式,内存级的缓存产品很多,支持的内存优化接口有 Memcache、eAccelerator、Alternative PHP Cache(APC)、Xcache、Redis 五种,优化系统将会依据当前服务器环境依次选用接口,单服务器环境中推荐使用APC,多服务器环境中推荐使用Redis或Memcache。
数据层是以表为单位的类文件,所有表类都继承discuz_table基类,基类实现缓存操 作的相关函数;理论上所有的数据表均可以缓存,目前产品在六个压力大的数据表内置开启了缓存 机制:用户相关表、回帖、主题、主题和专辑关系、淘贴专辑、用户关注关系。
用户相关表
缓存表:'common_member', 'count', 'status','profile', 'field_home', 'field_forum'。
UID为缓存KEY。表数据更新时缓存数据会同步更新。
回帖
以TID为单位,缓存第一页的post数据。表数据更新时缓存数据会同步更新。
主题
TID为缓存KEY。表数据更新时缓存数据会同步更新。
版块列表默认参数第一页时以 forumdisplay_FID 为缓存KEY,缓存时间内数据不更新。
主题和专辑关系
以TID为单位,此TID的专辑ID集合,表数据更新时缓存数据会同步更新。
淘贴专辑
以TID为单位,此TID的专辑集合,缓存时间内数据不更新。
用户关注关系
以UID为单位,此UID关注用户的关系数据,缓存时间内数据不更新。
discuz_table基类中缓存机制的方法