天天看點

discuz 文章子產品用到的表及自動發帖函數

  最近在做一個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存放了對應闆塊的發帖數量,今日發帖數以及最近發帖的标題等資訊。

  好了,了解了這幾張表之間的關系後有了下面這個函數和測試例子。

  

  addThread參數需要提供幾個必要的參數闆塊ID、标題、使用者名、使用者ID和消息内容。如果你想往哪個闆塊自動生成一個文章,盡管調用addThread函數即可。

  如果是插件這裡有個需要特别注意的地方。

  否則,插件的模闆将無法調用。這是為什麼呢?這涉及到discuz插件模闆設計的問題。

  原因分析:

   ./source/module/forum/forum_viewthread.php,大概700行左右,有這麼一段

  原因就出在這。

  1、special為127是才執行插件的内容

  2、由于插件有很多,真麼知道是哪個插件呢?是以,請看這行

    $sppos = strpos($postlist[$_G['forum_firstpid']]['message'], chr(0).chr(0).chr(0));

  discuz采用了chr(0).chr(0).chr(0)進行分割,擷取插件名。如果無法擷取插件名,則無法調用相應的模闆,因而也就調用預設的系統模闆了。