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