主題: 請問如何在 summary.php實做最新迴響? 作者: CrazyLion 於 三月 28, 2006, 08:57:37 下午 最近想幫實驗室的網誌加上這個功能,我搜尋了論壇,有看到recentcomments 的外掛程式,不過印象中summary.php 摘要這頁似乎是不支援任何的外掛程式的。
我剛剛翻了一下API,似乎沒看到可以用的api,不知道是不是要自己硬code呢? 感謝! 主題: Re: 請問如何在 summary.php實做最新迴響? 作者: lss 於 三月 28, 2006, 09:58:39 下午 你可以參考修改 class/summary/action/summarydefaultaction.class.php 這個檔案,再配合修改 summary 的樣版就可以了。
我之前寫的摘要頁面公告核心補強 (http://blog.nlhs.tyc.edu.tw/post/2/43)就是這樣改出來的,不難實作,參考看看。 lss 主題: Re: 請問如何在 summary.php實做最新迴響? 作者: CrazyLion 於 三月 28, 2006, 10:18:15 下午 你可以參考修改 class/summary/action/summarydefaultaction.class.php 這個檔案,再配合修改 summary 的樣版就可以了。 也就是說沒有api可以用,要自己硬code囉,那太感謝了,動工去。我之前寫的摘要頁面公告核心補強 (http://blog.nlhs.tyc.edu.tw/post/2/43)就是這樣改出來的,不難實作,參考看看。 lss 主題: Re: 請問如何在 summary.php實做最新迴響? 作者: CrazyLion 於 三月 29, 2006, 06:58:43 下午 sorry 我今天改了一下, 可是資料撈不出來 :-(,請大家幫我看看。
我把recentComments寫到 summarystats裡面讓他成為summarystats的一個子方法。 再從summarydefaultaction.class.php把資料給挖出來 程式碼如下: class/summary/dao/summarystats.class.php 程式碼: function getRecentComments( $maxComments = 10){ class/summary/action/summarydefaultaction.class.php: 引用 $maxRecentComments = 10; $recentComments = $stats->getRecentComments($maxRecentComments); $this->_view->setValue( "posts", $recentPosts ); $this->_view->setValue( "recentBlogs", $recentBlogs ); $this->_view->setValue( "activeBlogs", $activeBlogs ); $this->_view->setValue( "commentedPosts", $commentedPosts ); $this->_view->setValue( "readestBlogs", $readestBlogs ); $this->_view->setValue( "blogs", $siteBlogs ); $this->_view->setValue( "recentComments",$recentComments); 不過現在的問題是資料撈不出來...,也就是說拿迴響內容的時候是空的。因為我把$row['test topic']改成"test" 就可以在前端顯示。 請問一下,我可能是哪裡搞錯了呢? 謝謝 主題: Re: 請問如何在 summary.php實做最新迴響? 作者: lss 於 三月 29, 2006, 07:35:44 下午 不知道你的 $row['test topic'] 是那個欄位? article_comment 資料表裡面有 topic 欄位,但是沒有 test topic 欄位啊?
你用 $row['test'] 可以在前端顯示,但是應該沒有文章標題可以用吧?! 試試看把 $row['test topic'] 改成 $row['topic'] 應該就可以了。 lss 主題: Re: 請問如何在 summary.php實做最新迴響? 作者: CrazyLion 於 三月 29, 2006, 07:51:04 下午 不知道你的 $row['test topic'] 是那個欄位? article_comment 資料表裡面有 topic 欄位,但是沒有 test topic 欄位啊? XD 實際上我不是這樣寫...po上來的時候弄錯了@@ sorry你用 $row['test'] 可以在前端顯示,但是應該沒有文章標題可以用吧?! 試試看把 $row['test topic'] 改成 $row['topic'] 應該就可以了。 lss 不過他還是不能動..真是奇怪 主題: Re: 請問如何在 summary.php實做最新迴響? 作者: CrazyLion 於 三月 30, 2006, 12:56:31 下午 找到問題了,等一下把結果po上來
主題: Re: 請問如何在 summary.php實做最新迴響? 作者: CrazyLion 於 三月 30, 2006, 06:05:36 下午 成功了!
要達到這個功能,依照我的設計需要修改三個檔案,分別是: class/summary/dao/summarystats.class.php class/summary/action/summarydefaultaction.class.php templates/summary/index.template 首先要修改summarystats.class.php 建立一個新的成員函式getRecentComment() 程式碼: function getRecentComments( $maxComments = 10){ 再來是summarydefaultaction.class.php,需要加入兩行(紅色的部份) 引用 $activeBlogs = $stats->getMostActiveBlogs( $this->_numPosts); $commentedPosts = $stats->getMostCommentedArticles( $this->_numPosts, $registerTopic, $registerText ); $readestBlogs = $stats->getMostReadArticles( $this->_numPosts, $registerTopic, $registerText ); $recentComments = $stats->getRecentComments(); 引用 $this->_view->setValue( "posts", $recentPosts ); $this->_view->setValue( "recentBlogs", $recentBlogs ); $this->_view->setValue( "activeBlogs", $activeBlogs ); $this->_view->setValue( "commentedPosts", $commentedPosts ); $this->_view->setValue( "readestBlogs", $readestBlogs ); $this->_view->setValue( "blogs", $siteBlogs ); $this->_view->setValue("recentComments",$recentComments); 然後你就可以在前端的網頁選擇加入的地方,已我們實驗室為例,我們是加在左邊的功能列,也就是index.template這個頁面。 程式碼: <ul class="itemList"> ---------------- 備註:我知道取出getRecentComment()裡應該可以換成運行一次sql就把資料撈出來,可是剛剛試了一下,底下的_fillArticleInformation似乎無法正常運作,我推測大概是跟select出來的name有關。已經可以動了,所以我就不改了:P 之前資料拿不出來的原因很奇怪,我原本的程式是: while( $row = $result->FetchRow() && ($i<$maxComments)){ } 可是這樣$row['topic'].之類的資料會拿不出來,改成 while( $row = $result->FetchRow()){ 這樣就好了,..我知道原本這樣寫有點無謂 XD 只是為什麼這會影響到資料的取出呢?真奇怪? 主題: Re: 請問如何在 summary.php實做最新迴響? 作者: lss 於 三月 30, 2006, 07:10:36 下午 .... 這應該跟運算的優先順序有關。你要的應該是這樣:之前資料拿不出來的原因很奇怪,我原本的程式是: while( $row = $result->FetchRow() && ($i<$maxComments)){ } 可是這樣$row['topic'].之類的資料會拿不出來,改成 while( $row = $result->FetchRow()){ 這樣就好了,..我知道原本這樣寫有點無謂 XD 只是為什麼這會影響到資料的取出呢?真奇怪? 引用 while( ($row = $result->FetchRow()) && ($i<$maxComments)){ 可是你的寫法大概會變成這樣的運算順序:} 引用 while( $row = ($result->FetchRow() && ($i<$maxComments))){ 這大概就是問題所在吧 :-)} 無論如何,恭喜你 hack 成功 :-) 這篇我搬到核心補強版,放進精華區囉! lss 主題: Re: 請問如何在 summary.php實做最新迴響? 作者: CrazyLion 於 三月 30, 2006, 07:25:02 下午 阿 !!!真的!!!
你不說我還真沒發現到括號這個問題.... 真是見笑了 :-$ 下次會更注意的@@ 感謝! 主題: Re: 請問如何在 summary.php實做最新迴響? 作者: lss 於 三月 30, 2006, 08:10:49 下午 hi CrazyLion:
我也嘗過這種苦頭,刻骨銘心啊。 別客氣了,有空多交流啊! :-) lss 主題: Re: 請問如何在 summary.php實做最新迴響? 作者: CrazyLion 於 十月 15, 2006, 08:16:57 下午 for 1.1的版本:
把 class/summary/dao/summarystats.class.php裡的 function getRecentComments( $maxComments = 20) 裡面的所有程式碼換成 換成 引用 include_once( PLOG_CLASS_PATH.'class/dao/articlecomments.class.php' ); include_once( PLOG_CLASS_PATH.'class/dao/usercomment.class.php' ); include_once( PLOG_CLASS_PATH."class/dao/articles.class.php" ); $articleComments = new ArticleComments(); $articles = new Articles(); $prefix = $this->getPrefix(); $query = "SELECT * FROM {$prefix}articles_comments WHERE status = 0 ORDER BY date DESC LIMIT 0,".$maxComments; $result = $this->Execute($query); if(!$result) return false; $recentComments = Array(); while( $row = $result->FetchRow()){ $comment = $articleComments->getComment($row['id']); $comment->setArticle($articles->getArticle[$row['article_id']]); array_push($recentComments,$comment); } $result->Close(); return $recentComments; 這次簡潔多了阿!!! 1.1真不賴 :D 主題: Re: 請問如何在 summary.php實做最新迴響? 作者: php 於 十一月 17, 2006, 07:40:31 下午 for 1.1的版本: 帮帮我啊!我照这个做了(我现在的版本是1.1.2),并在summarydefaultaction.class.php中加入了:$this->_view->setValue("recentComments",$recentComments);把 class/summary/dao/summarystats.class.php裡的 function getRecentComments( $maxComments = 20) 裡面的所有程式碼換成 換成 引用 include_once( PLOG_CLASS_PATH.'class/dao/articlecomments.class.php' ); include_once( PLOG_CLASS_PATH.'class/dao/usercomment.class.php' ); include_once( PLOG_CLASS_PATH."class/dao/articles.class.php" ); $articleComments = new ArticleComments(); $articles = new Articles(); $prefix = $this->getPrefix(); $query = "SELECT * FROM {$prefix}articles_comments WHERE status = 0 ORDER BY date DESC LIMIT 0,".$maxComments; $result = $this->Execute($query); if(!$result) return false; $recentComments = Array(); while( $row = $result->FetchRow()){ $comment = $articleComments->getComment($row['id']); $comment->setArticle($articles->getArticle[$row['article_id']]); array_push($recentComments,$comment); } $result->Close(); return $recentComments; 這次簡潔多了阿!!! 1.1真不賴 :D 另外几句,照你原来的,找不到了。现在这样子,在index.template中却不能显示出最新评论,麻烦看看是怎么回事?哪位大哥帮帮我? 谢谢了。 主題: Re: 請問如何在 summary.php實做最新迴響? 作者: CrazyLion 於 十一月 17, 2006, 08:49:11 下午 帮帮我啊!我照这个做了(我现在的版本是1.1.2),并在summarydefaultaction.class.php中加入了:$this->_view->setValue("recentComments",$recentComments); 另外几句,照你原来的,找不到了。现在这样子,在index.template中却不能显示出最新评论,麻烦看看是怎么回事?哪位大哥帮帮我? 谢谢了。 1.1.2我還沒試耶 我晚點幫你測看看 :P 主題: Re: 請問如何在 summary.php實做最新迴響? 作者: php 於 十一月 18, 2006, 11:25:42 上午 真是好大哥,非常感谢!!
主題: Re: 請問如何在 summary.php實做最新迴響? 作者: php 於 十一月 20, 2006, 08:18:34 下午 大哥帮帮忙啊!
|