discuz自定义接口开发——一键发帖,自动发帖,站外发帖(主题)
需求:
現(xiàn)有一個(gè)公司內(nèi)部使用的辦公系統(tǒng),需要將每天的活動(dòng)信息匯總成報(bào)表數(shù)據(jù)自動(dòng)發(fā)布到論壇的某個(gè)板塊中。之前做了discuz論壇與辦公系統(tǒng)的同步登陸功能,使用的Ucenter。查看了相關(guān)的api接口,沒有找到一鍵發(fā)布論壇帖子的相關(guān)設(shè)置,所以網(wǎng)上找了相關(guān)的信息,自己動(dòng)手豐衣足食。
論壇是discuz,另一個(gè)系統(tǒng)是用的Thinkphp32。接觸過這兩個(gè)系統(tǒng)并做過Ucenter同步登陸功能的朋友,應(yīng)該看著比較明白。
簡單了解discuz論壇數(shù)據(jù)庫表結(jié)構(gòu):
discuz發(fā)表主題(帖子)涉及到的幾個(gè)表:(這里列出了主要的幾個(gè)相關(guān)的表)?
? ? ? ? 1、主題表 pre_forum_thread:這個(gè)表一個(gè)主要數(shù)據(jù)就是 tid 主題ID
? ? ? ? 2、post 分表協(xié)調(diào)表 pre_forum_post_tableid:這里需要獲取一個(gè)自增的 pid
? ? ? ? 3、帖子表 pre_forum_post :記錄主題pid、fid、tid、title、content等主要信息
? ? ? ? 4、版塊表 pre_forum_forum:這里主要更新版塊的主題、帖子數(shù)量
? ? ? ? 5、帖子主題審核數(shù)據(jù)表 pre_forum_thread_moderate:這個(gè)可以根據(jù)自己狀況決定,并不是必須的
? ? ? ? 6、用戶統(tǒng)計(jì)表 pre_common_member_count:主要是更新用戶的主題數(shù)量
? ? ? ? 自己處理發(fā)帖主要涉及到了上面6個(gè)數(shù)據(jù)庫表,其中第5個(gè)不是必須的。
想了解discuz 數(shù)據(jù)庫相關(guān)信息可以查看:http://www.dz7.com.cn/library/database/
大致數(shù)據(jù)插入的流程:
? ? ? ? 第一步:向 主題表 pre_forum_thread 中插入版塊ID、用戶ID、用戶名、帖子標(biāo)題、發(fā)帖時(shí)間等信息。
? ? ? ? 第二步:獲取第一步插入表 pre_forum_thread 的數(shù)據(jù)ID,作為主題ID,即 tid?
? ? ? ? 第三步:向 post 分表協(xié)調(diào)表 pre_forum_post_tableid 插入一條數(shù)據(jù),這張表中只有一個(gè)自增字段 pid?
? ? ? ? 第四步:獲取 第三步 插入表 pre_forum_post_tableid 的數(shù)據(jù)ID,作為 pid?
? ? ? ? 第五部:向帖子表 pre_forum_post 中插入帖子相關(guān)信息,這里需要注意的是: pid為第四部的pid值,tid為第二步的tid值?
? ? ? ? 第六部:更新版塊 pre_forum_forum 相關(guān)主題、帖子數(shù)量信息?
? ? ? ? 第七步:更新用戶 pre_common_member_count 帖子數(shù)量信息?
? ? ?注:discuz發(fā)帖過程主要就是以上7個(gè)步驟,通過這幾個(gè)步驟就可以完成對實(shí)現(xiàn)discuz的發(fā)帖流程,其中設(shè)計(jì)到一些積分等其他信息的可以自己加上。 如果這里可以明白的話,下面的就不用看了,自己學(xué)著操作就好。
具體的操作:
1.修改擴(kuò)展文件? ? UcApi.class.php
這里的擴(kuò)展文件是Thinkphp未實(shí)現(xiàn)Ucenter同步登陸加載的擴(kuò)展文件
/*** [sendForumPost 一鍵自動(dòng)發(fā)布主題接口]* @param [type] $title [帖子標(biāo)題]* @param [type] $content [帖子內(nèi)容]* @return [type] [description]*/public function sendForumPost($title,$content){$uid = 1;//公共信息,使用admin用戶的id$forumId=112;//主題板塊id|112=通知與公告$result = send_forum_post($uid,$title,$content,$forumId);return $result;}由于固定發(fā)個(gè)帖子,所以我直接將主題板塊id和用戶名稱,用戶id,先寫成固定的,大家可以根據(jù)自己實(shí)際情況靈活設(shè)置。
在UcApi.class.php文件中,調(diào)用的方法多數(shù)是來源于uc_client引入的函數(shù)文件client.php
2.修改Ucenter客戶端uc_client文件 client.php
這里是模仿創(chuàng)建用戶接口流程。在UcApi.class.php文件中接口方法sendForumPost調(diào)用自定義內(nèi)置方法send_forum_post()。
function send_forum_post($uid,$title,$content,$forumId){$return = call_user_func(UC_API_FUNC, 'user', 'send_forum', array('title'=>$title,'content'=>$content,'forumId'=>$forumId, 'uid'=>$uid));return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return); }這里的call_user_func是一個(gè)內(nèi)置函數(shù)。
參數(shù)一:數(shù)據(jù)操作方式。mysql代表直連數(shù)據(jù)庫,還包括其他兩種方式:uc_api_mysql 、uc_api_post。
參數(shù)二:需要調(diào)用的控制器名稱,這里調(diào)用的是user.php
參數(shù)三:調(diào)用指定控制器中的方法名稱。對應(yīng)的方法前面會(huì)拼接一個(gè)on
參數(shù)四:向方法中傳入的參數(shù)數(shù)據(jù),這是使用的必須是數(shù)組。
3.修改Ucenter客戶端uc_client控制器文件 user.php
function onsend_forum(){$this->init_input();$title = $this->input('title');$content = htmlspecialchars($this->input('content'));$forumId = $this->input('forumId');$uid = $this->input('uid');$time = time();// 開始入庫操作// 第一步:向 主題表 pre_forum_thread 中插入版塊ID、用戶ID、用戶名、帖子標(biāo)題、發(fā)帖時(shí)間等信息。$this->db->query("INSERT INTO `".UC_DBNAME."`.pre_forum_thread SET fid='$forumId', authorid='$uid', author='admin', subject='$title', dateline='$time', lastpost='$time', lastposter='admin'"); // ?第二步:獲取第一步插入表 pre_forum_thread 的數(shù)據(jù)ID,作為主題ID,即 tid?$tid = $this->db->insert_id();// ?第三步:向 post 分表協(xié)調(diào)表 pre_forum_post_tableid 插入一條數(shù)據(jù),這張表中只有一個(gè)自增字段 pid?$this->db->query("INSERT INTO `".UC_DBNAME."`.pre_forum_post_tableid SET pid=''");// ?第四步:獲取 第三步 插入表 pre_forum_post_tableid 的數(shù)據(jù)ID,作為 pid?$pid = $this->db->insert_id();// ?第五部:向帖子表 pre_forum_post 中插入帖子相關(guān)信息,這里需要注意的是: pid為第四部的pid值,tid為第二步的tid值$this->db->query("INSERT INTO `".UC_DBNAME."`.pre_forum_post SET pid='$pid', fid='$forumId', tid='$tid', author='admin', authorid='$uid', subject='$title', dateline='$time', message='$content'");// ?第六部:更新版塊 pre_forum_forum 相關(guān)主題、帖子數(shù)量信息?$this->db->query("UPDATE `".UC_DBNAME."`.pre_forum_forum SET posts=posts+1,threads=threads+1 WHERE fid='$forumId'");// ?第七步:更新用戶 pre_common_member_count 帖子數(shù)量信息?$this->db->query("UPDATE `".UC_DBNAME."`.pre_common_member_count SET posts=posts+1,threads=threads+1 WHERE uid='$uid'");return $tid;// --------------------- // 作者:區(qū)塊鏈攻城獅 // 來源:CSDN // 原文:https://blog.csdn.net/weixin_42799222/article/details/90899369 // 版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接! }這里核心的操作數(shù)據(jù)庫的操作就是前面提到的七個(gè)步驟,如果不能直接用,可以參考借鑒。如有問題,或者哪里沒說明白,可以評論留言。
可有償提供支持:
discuz論壇服務(wù)器搭建
其他論壇內(nèi)容向discuz論壇做數(shù)據(jù)導(dǎo)入
discuz插件開發(fā)
或者其他技術(shù)支持
聯(lián)系QQ:951488865
總結(jié)
以上是生活随笔為你收集整理的discuz自定义接口开发——一键发帖,自动发帖,站外发帖(主题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 想成为一个Java软件工程师,谁能带我学
- 下一篇: 如何同时打开两个excel窗口