一 . 解析流程分析
论坛的入口为 form.php 在里面有定义整个入口规则
在首页随便查看一个连接的地址规则 如:http://localhost/discuz/forum.php?mod=guide&view=new
核心类里会自动分析并整合url 翻译以上地址去寻找 /source/module/forum/forum_guide.php 这个程序文件,你可以在这里写你的数据调用
二. 创建自己的程序和页面
在创建自己的文件之前请先看入口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','custom' );
在这里定义了forum的模块,如果你想写自己的文件模块,那么假设模块功能文件名为custom,在上的数组中加入custom;
根据一中的规则 那么 我们的程序文件应该写在/source/module/forum/中 并命名为forum_custom.php;
forum_custom.php
<?php if(!defined('IN_DISCUZ')) { exit('Access Denied'); } $query = DB::query("select * from 027_common_admincp_group"); $list = array(); while($result = DB::fetch($query)){ $list[] = $result['cpgroupname']; } include template('forum/custom'); ?>
载入模板文件template('forum/custom') 意思是载入/template/forum/custom.htm文件
<!--{subtemplate common/header}--> <div class="container"> <p> 以下是管理员组: </p> <!--{loop $list $a}--> {$a}<br/> <!--{/loop}--> </div> <!--{subtemplate common/footer}-->
三. 数据调用
discuz在class_core中提供了t方法,对应取source/class/table/文件夹下的相对应不带表前缀的表名如我要取027_common_admincp_group这张表
C::t('common_admincp_group')
api:
C::t($tablename')->count() 获取表所有行数 C::t($tablename')->update(键值,$data) 更新键值数据 C::t($tablename')->delete(键值) 删除键值数据 C::t($tablename')->truncate() 清空表 C::t($tablename')->insert($data, $return_insert_id,$replace) 插入数据 C::t($tablename')->fetch_all($ids) fetch 数据,可以是单一键值或者多个键值数组 C::t($tablename')->fetch_all_field() fetch所有的字段名表 C::t($tablename')->range($start, $limit, $sort) fetch值域范围 C::t($tablename')->optimize() 优化表
由于C::t()方法取数据的定制性太差 所以还是建议用DB操作数据库
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) 返回条件 DB::order(别名, 方法) 排序