主題: 請問lifetype的發佈文章的sql query 作者: kevinblue 於 二月 28, 2006, 12:46:31 下午 小弟是一個bbs的administrator
由於blog的風氣越來越盛,所以我們學校也決定要架blog 但是只有單純的blog似乎沒有什麼搞頭 所以我們就決定要把blog跟bbs的個人看板文章作整合(如果可以搭配上RSS就更好了) 使用者可以透過bbs client端發表blog文章,他也可以在bbs client設定這篇文章到底要不要發佈成blog 但是問題來了 bbsd是用c寫成的,而且我也不太會PHP(只有稍微看一下) 不過我有設計table和設計DB app的經驗 我的想法是lifetype是利用php寫的 那只要找出它insert文章的sql query這樣便可以輕易達到我所要的 可是我看了lifetype的source code很久還是沒找到相關的sql query 所以想請問一下lifetype新增一篇文章的流程是?? 主題: Re: 請問lifetype的發佈文章的sql query 作者: lss 於 二月 28, 2006, 01:27:55 下午 從 lifetype\class\action\admin\adminaddpostaction.class.php 這個程式開始吧。
跟文章的 sql 相關的在 lifetype\class\dao\articles.class.php 你也可以搜尋一下論壇,有人實作了透過 xmlrpc 管理功能。 lss 主題: Re: 請問lifetype的發佈文章的sql query 作者: markwu 於 二月 28, 2006, 10:48:05 下午 這是個很有意思的問題啊!
你必須先確認你的需求,是雙向( bbs <--> blog) 還是單向 (bbs --> Blog)。如果是單向,單純從 bbs 要發文到 blog,那只要透過 lifetype 的 xmlrpc.php 來做就可以了。 xmlrpc 目前支援 metaWeblog API 與 blogger API,你兩個都可以嘗試。 好,問題來了,在 C 底下要怎麼用 xmlrpc。(大部分的 bbs 應該都還是 C 寫的吧) 你可以到 http://www.xmlrpc.com/directory/1568/implementations 找到相關的 xmlrpc 的 實做來使用。你可以是是看這一個: http://xmlrpc-c.sourceforge.net/ 你可以透過 metaWeblogAPI 中的 metaWeblog.newPost 或是 bloggapi 中的 blogger.newPost 來新增文章到blog 中。 ===== 但是要能這麼做之前,你恐怕有一些事情要先做: 1. 整合 bbs 的註冊與 blog 註冊。比較簡單的方式是, disable lifetype 本身的註冊功能。透過 bbs 的一個選項,來決定要不要啟用 blog 帳號,這時候再來註冊。 2. 修改 bbs,在個人的註冊欄位上加上 blogid 或是 blogusername,在 lifetype 中是不准使用中文名稱來註冊的,所以我建議紀錄 blog id 3. 在 bbs 發表文章時,得要能選擇要不要發表到 blog,以及發表的 category。(這個可以透過 xmlrpc 來取得) 4. 才是把文章發表到 blog ====== 如果是雙向,就更複雜『很多』。我不建議一開始就這麼做。 Mark 主題: Re: 請問lifetype的發佈文章的sql query 作者: markwu 於 二月 28, 2006, 10:51:40 下午 BTW,為什麼建議用 xmlrpc,因為這樣的implement 會讓這兩個系統能夠各自運作,卻又不會程式全部攪在一起。也不會因為 lifetype db schema change ,造成你的程式失效。
另外,因為兩個程式是不同的lanugage,用 web service 來結合也是比較建議的方式。 當然你也可以用 odbc 連結 mysql,直接把資料寫入。我個人不是很建議! Mark 主題: Re: 請問lifetype的發佈文章的sql query 作者: kevinblue 於 二月 28, 2006, 11:15:28 下午 首先感謝markwu大跟lss大
1. 整合 bbs 的註冊與 blog 註冊。比較簡單的方式是, disable lifetype 本身的註冊功能。透過 bbs 的一個選項,來決定要不要啟用 blog 帳號,這時候再來註冊。 bbs有bbsid我想這個利用mysql c api寫一個程式去讀.acct檔把他轉成blog id便可 :) 2. 修改 bbs,在個人的註冊欄位上加上 blogid 或是 blogusername,在 lifetype 中是不准使用中文名稱來註冊的,所以我建議紀錄 blog id 我想blog跟bbs的id同步會比較好,而且現在99.99%的bbs id都是英文 囧3. 在 bbs 發表文章時,得要能選擇要不要發表到 blog,以及發表的 category。(這個可以透過 xmlrpc 來取得) 我想目前只會先作bbs ---> blog的功能4. 才是把文章發表到 blog blog --> bbs等第一個功能做出來再說 Orz 另外lss大的提醒我找到好像是LF insert article的sql query了不知道是不是 @_@ 引用自: kevinblue /** * Adds a new article to the database * * @param newArticle An Article object with all the necessary information. * @return Returns true if article was added successfully or false otherwise. If successful, it will modify the parmeter * passed by reference and set its database id. */ function addArticle( &$newArticle ) { // first, we build up the query $query = "INSERT INTO ".$this->getPrefix()."articles( user_id,blog_id,status,date,properties, slug ) VALUES ( ".$newArticle->getUser().",". $newArticle->getBlog().",'". $newArticle->getStatus()."','". $newArticle->getDate()."','". serialize($newArticle->getProperties())."','". $newArticle->getPostSlug()."');"; // and then we send it to the db //$this->_db->debug=true; $result = $this->Execute( $query ); if( !$result ){ return false; } 主題: Re: 請問lifetype的發佈文章的sql query 作者: markwu 於 二月 28, 2006, 11:54:57 下午 如果你真的還是要用 db 直接寫入,哪恐怕不是指有那一個。
lifetyp 的 article 是 de-normalize 過的,所以分成好幾個 table ... 你必須要看: addArticle(); -> lt_articles addArticleText(); -> lt_articles_text addPostCategoriesLink(); ->lt_articles_categories_link 這三個! 所以我才不建議直接做 DB insert。 Mark |