您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程
discuz帖子模块用到的表及自动发帖函数介绍
寒云2025-06-27Discuz教程已有人查阅
导读最近在做一个discuz的插件,由于需要程序自动生成并调用discuz已经存在插件的帖子。然而这就相当于自动发帖的功能了。网上找了一下,大部分都是通过curl模拟登陆,模拟发帖的
最近在做一个discuz的插件,由于需要程序自动生成并调用discuz已经存在插件的帖子。然而这就相当于自动发帖的功能了。网上找了一下,大部分都是通过curl模拟登陆,模拟发帖的,这显然不满足我的要求。如果采用这种方式既笨重又麻烦。百度了一通,没发现好的结果。于是google了一番,之后找到一个类似的方法。经过一番整理,于是有了下面这个函数。
discuz帖子模块用到的表:
帖子表:pre_forum_post
帖子表pid较大值设置表:pre_forum_post_tableid
帖子列表表:pre_forum_thread
帖子所在板块表:pre_forum_forum
这几个表之间的关系是,帖子表pre_forum_post存放帖子的详细信息,其pid通过pre_forum_post_tableid表获得。帖子列表pre_forum_thread表决定了该条记录是否显示在列表中,如果此表中没有相应的记录帖子也就无法显示在列表中了。帖子所在板块表pre_forum_forum存放了对应板块的发帖数量,今日发帖数以及最近发帖的标题等信息。
好了,了解了这几张表之间的关系后有了下面这个函数和测试例子。
如果是插件这里有个需要特别注意的地方。
1、forum_thread表,必须将special字段的值设为127($thread["special"]= 127;)
2、forum_post表的message字段。如果你的是插件的话,之后面一定要加上
原因分析:
./source/module/forum/forum_viewthread.php,大概700行左右,有这么一段
1、special为127是才执行插件的内容
2、由于插件有很多,真么知道是哪个插件呢?因此,请看这行
discuz帖子模块用到的表:
帖子表:pre_forum_post
帖子表pid较大值设置表:pre_forum_post_tableid
帖子列表表:pre_forum_thread
帖子所在板块表:pre_forum_forum
这几个表之间的关系是,帖子表pre_forum_post存放帖子的详细信息,其pid通过pre_forum_post_tableid表获得。帖子列表pre_forum_thread表决定了该条记录是否显示在列表中,如果此表中没有相应的记录帖子也就无法显示在列表中了。帖子所在板块表pre_forum_forum存放了对应板块的发帖数量,今日发帖数以及最近发帖的标题等信息。
好了,了解了这几张表之间的关系后有了下面这个函数和测试例子。
<?php
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
echo "11111111111111111111111";
require_once DISCUZ_ROOT . './source/class/class_core.php';
$discuz = C::app();
$discuz->cachelist = $cachelist;
$discuz->init();
$subject = '自行写入帖子';
$message = '自行写入帖子的消息消息消息';
$thread['fid'] = 86;
$thread['subject'] = $subject;
$thread['message'] = $message;
$thread["authorid"]= 1;
$thread["author"]=$_G['member'][username];
$tid = addThread($thread);
echo "*********** $tid **************";
/*
* 添加帖子
* @data 帖子数组
* array('fid' => '板块ID',
'subject' => '标题',
'message' => '具体内容',
'authorid' => '用户ID',
'author' => '用户名');
*/
function addThread($data){
$fid = $data['fid'];
$subject = $data['subject'];
$message = $data['message'];
$authorid = $data['authorid'];
$author = $data['author'];
$proc_time = time();
$thread['fid'] = $fid;//板块ID
$thread['subject'] = $subject;//标题
$thread["authorid"]= $authorid;
$thread["author"]= $author;
$thread["dateline"]= $proc_time;
$thread["lastpost"]= $proc_time;
$thread["lastposter"]= $author;
//插件必须添加special参数,否则无法按照插件的样式进行显示
$thread["special"]= 127;//特殊主题,1:投票;2:商品;3:悬赏;4:活动;5:辩论贴;127:插件相关
$tid=C::t('forum_thread')->insert($thread, 1);//添加到帖子列表
if($tid){
$post["tid"] = $tid;
$post['fid'] = $fid;
$post["position"]= 1;
$post["smileyoff"]= "-1";
$post["bbcodeoff"]= "-1";
$post["usesig"]= 1;
$post["author"]= $author;
$post["authorid"]= $authorid;
$post["subject"]= $subject;
$post["message"]= $message . chr(0).chr(0).chr(0) . "online_alipay";//结尾一定要加chr(0).chr(0).chr(0) . "online_alipay"结尾,否则无法调用插件的模板。
$post["dateline"]= $proc_time;
$post["first"]= 1;
$pid = C::t('forum_post_tableid')->insert(array('pid' => null), true);//添加pre_forum_post表的pid较大值
$post["pid"]= $pid;
$okid=C::t('forum_post')->insert("0", $post, 1);//写入帖子
$lastpost = $tid . "$subject" . $proc_time . $author;
$sql = "update " . DB::table('forum_forum') . " set threads = threads + 1, todayposts = todayposts + 1, lastpost = '$lastpost' where fid= $fid";//修改今日主题和帖子数量
DB::query($sql);
}
return $tid;
}
?>
addThread参数需要提供几个必要的参数板块ID、标题、用户名、用户ID和消息内容。如果你想往哪个板块自动生成一个帖子,尽管调用addThread函数即可。如果是插件这里有个需要特别注意的地方。
1、forum_thread表,必须将special字段的值设为127($thread["special"]= 127;)
2、forum_post表的message字段。如果你的是插件的话,之后面一定要加上
chr(0).chr(0).chr(0) . "插件名称"
否则,插件的模板将无法调用。这是为什么呢?这涉及到discuz插件模板设计的问题。原因分析:
./source/module/forum/forum_viewthread.php,大概700行左右,有这么一段
if($_G['forum_thread']['special'] > 0 && (empty($_GET['viewpid']) || $_GET['viewpid'] == $_G['forum_firstpid'])) {
$_G['forum_thread']['starttime'] = gmdate($_G['forum_thread']['dateline']);
$_G['forum_thread']['remaintime'] = '';
switch($_G['forum_thread']['special']) {
case 1: require_once libfile('thread/poll', 'include'); break;
case 2: require_once libfile('thread/trade', 'include'); break;
case 3: require_once libfile('thread/reward', 'include'); break;
case 4: require_once libfile('thread/activity', 'include'); break;
case 5: require_once libfile('thread/debate', 'include'); break;
case 127:
if($_G['forum_firstpid']) {
$sppos = strpos($postlist[$_G['forum_firstpid']]['message'], chr(0).chr(0).chr(0));
$specialextra = substr($postlist[$_G['forum_firstpid']]['message'], $sppos + 3);
$postlist[$_G['forum_firstpid']]['message'] = substr($postlist[$_G['forum_firstpid']]['message'], 0, $sppos);
if($specialextra) {
if(array_key_exists($specialextra, $_G['setting']['threadplugins'])) {
@include_once DISCUZ_ROOT.'./source/plugin/'.$_G['setting']['threadplugins'][$specialextra]['module'].'.class.php';
$classname = 'threadplugin_'.$specialextra;
if(class_exists($classname) && method_exists($threadpluginclass = new $classname, 'viewthread')) {
$threadplughtml = $threadpluginclass->viewthread($_G['tid']);
//var_dump($post['message']);
}
}
}
}
break;
}
}
原因就出在这。1、special为127是才执行插件的内容
2、由于插件有很多,真么知道是哪个插件呢?因此,请看这行
$sppos = strpos($postlist[$_G['forum_firstpid']]['message'], chr(0).chr(0).chr(0));
discuz采用了chr(0).chr(0).chr(0)进行分割,获取插件名。如果无法获取插件名,则无法调用相应的模板,因而也就调用默认的系统模板了。
本文标签:
很赞哦! ()
下一篇:discuz数据表结构介绍
图文教程
discuz邮件设置步骤教程
说明:Discuz! 的邮件功能,对于站长来说是相当重要的,如果用户忘记密码,可以通过邮件直接取回,比较方便下面为大家仔细讲解如果设置邮件功能。一、Discuz! 支持如下三种邮件发送方式:
discuz怎么安装,discuz安装步骤教程
Discuz安装指南:准备LAMP环境、域名、FTP客户端。上传Discuz文件到网站根目录。创建数据库并配置config.php文件。运行安装程序,填写基本信息和管理员账户。
Ubuntu10.10安装Discuz的方法
1,给Ubuntu10.10安装数据库和Web服务器Apache作为一个功能强大的Web程序,自然是架建Web服务器的优选,好了,下面我们就来安装Apache。在终端下输入下在面命令:
LNMP环境搭建discuz论坛的方法
一、操作系统级环境及软件版本二、安装MySQL-5.6.28三、安装php安装php之前先安装差不多用到的包安装epel-release扩展源创建php-fpm用户
相关源码
-
(响应式)蓝色智能摄像头安防防盗电子设备免费pbootcms源码下载这是一款针对智能安防行业特点设计的网站模板,采用蓝色系配色方案,体现科技感和安全性。模板包含产品展示、解决方案、技术支持和新闻中心等核心模块,能够全面展示智能安防设备的技术特点和行业应用。查看源码 -
(PC+WAP)绿色产品环保设备垃圾桶厂家公司网站pbootcms模板为垃圾桶生产商、环保设备企业打造的高端响应式门户模板,基于PbootCMS开源内核深度开发。采用HTML5自适应架构,无缝实现PC与手机端数据实时同步与交互优化查看源码 -
帝国cms淘宝客京东联盟网站整站源码下载本模板基于帝国CMS内核深度开发,为淘宝客行业量身定制。随着腾讯微信与淘宝生态的互联互通,淘宝客链接现可在微信、QQ等平台直接分享,为推广带来更多便利。模板特别优化了店铺推广功能,有效避免商品下架导致的链接失效问题,同时支持京东联盟等多平台商品推广。查看源码 -
帝国cms7.5个人博客资讯文章模板下载本模板简洁个人博客网站设计开发,采用帝国CMS内核构建,只需替换文字图片即可快速搭建专业网站。自适应手机端设计,数据实时同步,操作简单便捷。PHP程序确保安全稳定运行,帮助您以较低成本获取持续业务。查看源码 -
(PC+WAP)五金机械设备营销型模板下载带在线留言为机械设备制造商设计的营销型模板,集成产品参数对比系统、产品展示模块和询价管理功能。采用PbootCMS开发内核,PHP7+运行环境。手工编写语义化HTML5结构,CSS3动画优化交互体验。查看源码 -
(自适应响应式)水墨风白酒酿制酒业酒文化酒类产品网站源码下载本模板基于PbootCMS内核开发,为酒类企业打造的水墨风响应式网站解决方案。采用传统东方美学设计语言,呈现白酒文化底蕴,自适应移动端展示效果,数据实时同步更新,助力酒企建立专业数字化形象。查看源码
| 分享笔记 (共有 篇笔记) |
