LifeType 中文開發論壇

支援 => 使用與操作 => 主題作者是: bibicall 於 五月 09, 2005, 12:26:12 上午



主題: [求助]如何summary頁面顯示的文章數量?
作者: bibicall五月 09, 2005, 12:26:12 上午
summary頁面中的最近發表文章部份,只替每個blog顯示一篇文章
如果有新的文章,舊的文章就被取代
雖然已經去將後台週要顯示文章改成15篇
但是我比較想讓最近發表的15篇呈現在summary版面上
而不是每個部落格的最新文章

0.32的修改方式似乎不能在1.0中使用(請參照lss發表過的修改法) (http://web.nlhs.tyc.edu.tw/plog/post/4/72)
在class/dao裡面找不到文中所說的檔案,所以無從改起啊
請問1.0中有啥方法可以依樣畫葫蘆?


主題: [求助]如何summary頁面顯示的文章數量?
作者: bibicall五月 09, 2005, 12:37:43 上午
我來自問自答了 :-P
修改方式相同
只是檔案的路徑變了
class/summary/dao/summarystats.class.php

希望對大家有幫助囉


主題: [求助]如何summary頁面顯示的文章數量?
作者: markwu五月 09, 2005, 12:38:19 上午
如果你真的只要最後 15 篇,從改 SQL 著手是最快的吧,你看一下 getRecentArticles() 中的 SQL,

1. 把 AND TO_DAYS(NOW()) - TO_DAYS(a.date) < 7 拿掉。因為他只 query 最近 7 天內的文章。但是,注意喔,當你文章很多,這個可是會花很久時間的。
2. 把 $query .= " GROUP BY a.id HAVING COUNT(a.blog_id) = 1 ORDER BY a.date DESC LIMIT 0, $maxPosts"; 改為  $query .= " ORDER BY a.date DESC LIMIT 0, $maxPosts";  讓他不需再 by blogid 來作 group
3. 照 lss 說的把那一段拿掉。

應該就可以了!這是我用目測的,還沒試過,你可能要自己試試看。

另外,記得清 /tmp 下的 cache,因為你改完程式後,pLog 不知你改了,所以不會幫你清 cache。

Mark


主題: [求助]如何summary頁面顯示的文章數量?
作者: bibicall五月 09, 2005, 12:43:20 上午
感謝mark前輩的解答
我試著找出1.0中是不是也有相同的檔案
結果在1.0檔案的路徑變了
所以我只是找出那個檔案,照著lss前輩的方法改
這對不熟悉語法的我來說比較簡單 :-P
也成功的修改了,不過我只修改lss說的那幾行


主題: Re: [求助]如何summary頁面顯示的文章數量?
作者: luckybbdog十一月 19, 2005, 01:36:25 下午
找不到楼主所说的lss的文章,连接打不开,楼主能不能贴出来呢?辛苦了。


主題: Re: [求助]如何summary頁面顯示的文章數量?
作者: lss十一月 19, 2005, 02:19:01 下午
找不到楼主所说的lss的文章,连接打不开,楼主能不能贴出来呢?辛苦了。
這個問題就讓本尊來回答吧 :-P

那個是我舊站上的文章,至於舊站呢?因為資料庫毀了,所以也沒了!也許 google 還有庫存頁面,麻煩自己找一下吧!或者有人曾經轉載過,我也不知道。


主題: Re: [求助]如何summary頁面顯示的文章數量?
作者: bibicall十一月 19, 2005, 04:33:20 下午
幫你估狗了一下
文章來了,請參考

關於summary.php頁面顯示的文章數目
post by lss @ 19 八月, 2004 02:13

bcse兄在中文論壇中提到下面的問題:

我的站台中共有一個網誌,全域設定中 Summany 一頁能顯示的數量我設為 15 篇,但是我的 Summary 頁面始終只有一篇文章,有測試過再開一個網誌,這樣 Summary 就會顯示兩篇文章,請問是否能設定成讓它無論如何都顯示 15 篇文章呢?

這是因為,summary.php頁面裡,Latest Posts部份只替每個blog顯示一篇文章的緣故。如果整個plog網站裡有「許多」(是指很多很多……)blog時,替每個最近有文章的blog顯示出最新的文章摘要其實蠻不錯的。

對於blog不多的網站來說,不分blog把最新的文章顯示出來也不錯。如果要改成不分blog,只要最新的15篇文章(或全域設定的數目),請依照下面方法更改:

修改的檔案:class/dao/summarystats.class.php(註:此路徑為0.32版,1.0路徑為class/summary/dao/summarystats.class.php)
 找到下面的code:(第272-299行)

引用
    function getRecentArticles( $maxPosts )
    { 
        ........
        while( ($row = $result->FetchRow()) && ($i < $maxPosts) ) {
            if (!in_array($row["blog_id"], $blogs))
             {
                   $blogs[] = $row["blog_id"];
                   array_push( $posts, $articles->_fillArticleInformation($row) );
                   $i++;
             }
        }
        return $posts;
    }

   將紅色的部分刪除或註解掉成為下面的模樣:
 
引用
  function getRecentArticles( $maxPosts )
    { 
        ........
        while( ($row = $result->FetchRow()) && ($i < $maxPosts) ) {
             //if (!in_array($row["blog_id"], $blogs))
             //{
             //     $blogs[] = $row["blog_id"];
                   array_push( $posts, $articles->_fillArticleInformation($row) );
             //      $i++;
             //}
        }
        return $posts;
    }


這樣就大功告成了。

這時,回到你的summary.php頁面,Latest Posts部份應該就會不分blog,依時間顯示最近的15篇文章了。

你可以連到本站的summry頁面看看效果。


強烈建議你搭配mark上述的修改一併使用
但,mark上述修改有小錯誤
mark已於另一篇文章中修正,請自行搜尋參考!


主題: Re: [求助]如何summary頁面顯示的文章數量?
作者: luckybbdog十一月 19, 2005, 10:26:21 下午
谢谢几位老大。  :-)


主題: Re: [求助]如何summary頁面顯示的文章數量?
作者: chouy七月 13, 2006, 08:50:08 上午
如果你真的只要最後 15 篇,從改 SQL 著手是最快的吧,你看一下 getRecentArticles() 中的 SQL,

1. 把 AND TO_DAYS(NOW()) - TO_DAYS(a.date) < 7 拿掉。因為他只 query 最近 7 天內的文章。但是,注意喔,當你文章很多,這個可是會花很久時間的。
2. 把 $query .= " GROUP BY a.id HAVING COUNT(a.blog_id) = 1 ORDER BY a.date DESC LIMIT 0, $maxPosts"; 改為  $query .= " ORDER BY a.date DESC LIMIT 0, $maxPosts";  讓他不需再 by blogid 來作 group
3. 照 lss 說的把那一段拿掉。

應該就可以了!這是我用目測的,還沒試過,你可能要自己試試看。

另外,記得清 /tmp 下的 cache,因為你改完程式後,pLog 不知你改了,所以不會幫你清 cache。

Mark

AND TO_DAYS(NOW()) - TO_DAYS(a.date) < 7 这段code在哪个页面里?
是不是<3就是显示3天的.


主題: Re: [求助]如何summary頁面顯示的文章數量?
作者: markwu七月 13, 2006, 08:55:33 上午
1. 請看 /class/summary/dao/summarystats.class.php。
2. 把

引用
$t->subtractSeconds( 7 * 24 * 60 * 60 );

改成

引用
$t->subtractSeconds( 3 * 24 * 60 * 60 );

就可以了。

Mark


主題: Re: [求助]如何summary頁面顯示的文章數量?
作者: chouy七月 13, 2006, 09:24:21 上午
1. 請看 /class/summary/dao/summarystats.class.php。
2. 把

引用
$t->subtractSeconds( 7 * 24 * 60 * 60 );

改成

引用
$t->subtractSeconds( 3 * 24 * 60 * 60 );

就可以了。

Mark
我修改后,清除了tmp中的内容,还是显示3天前的如:10 七月 2006 ----13 七月 2006


主題: Re: [求助]如何summary頁面顯示的文章數量?
作者: markwu七月 13, 2006, 10:13:41 上午
你不是只要顯示三天內的文章嗎?

Mark


主題: Re: [求助]如何summary頁面顯示的文章數量?
作者: chouy七月 13, 2006, 11:08:50 上午
你不是只要顯示三天內的文章嗎?

Mark
这是四天的,我改成2也没反映.该文章数为10也没反映


主題: Re: [求助]如何summary頁面顯示的文章數量?
作者: markwu七月 13, 2006, 11:25:56 上午
你要不要看一下這個 sql,以及後續的處理程式。

他的目的是讓每一個 blog 只顯示一篇,且再一定時間範圍內。

你這樣自問自答,而我又不知你文章的分佈日期,我實在不知該如何幫你。

Mark


主題: Re: [求助]如何summary頁面顯示的文章數量?
作者: chouy七月 13, 2006, 03:12:31 下午
现在好了.


主題: Re: [求助]如何summary頁面顯示的文章數量?
作者: janyo1201十二月 13, 2006, 10:31:33 上午
Dear mark ~~
小弟試了貴站所提供的方法,並無法顯示出15篇文章
而且,在/class/summary/dao/summarystats.class.php中的語法,function 宣告的地方也不一樣!!
小弟不曉得該從何處修改!!

以下為小弟的程式碼:

        function getRecentArticles( $maxPosts, $ignoreTopic = "", $ignoreText = "" )
   
        {
            include_once( PLOG_CLASS_PATH . "class/data/timestamp.class.php" );
            include_once( PLOG_CLASS_PATH."class/dao/articles.class.php" );

            $t      = new Timestamp();
            $date   = $t->getTimestamp();
         $prefix = $this->getPrefix();

         $query = "SELECT a.id as id, a.id,a.date,
                             a.user_id,a.blog_id, a.status, a.properties,
                             a.num_reads, a.slug
                 FROM {$prefix}articles a,
                      {$prefix}blogs b
                 WHERE a.date >= ".$this->_sevenDaysAgo." AND a.date <= ".$this->_now."
                       AND a.blog_id = b.id
                       AND b.status = ".BLOG_STATUS_ACTIVE."
                       AND a.status = ".POST_STATUS_PUBLISHED;

         $query .= " ORDER BY a.date DESC LIMIT 0, $maxPosts";

            $result = $this->Execute( $query );

            if( !$result )
                return Array();

            $blogs = Array();
            $posts = Array();
            $i     = 0;

            while( ($row = $result->FetchRow()) && ($i < $maxPosts) ) {
                if (!in_array($row["blog_id"], $blogs))
                {
                    $blogs[] = $row["blog_id"];
                    array_push( $posts, $this->articles->_fillArticleInformation($row) );
                    $i++;
                }
            }
           
            $result->Close();           

            return $posts;
        }



主題: Re: [求助]如何summary頁面顯示的文章數量?
作者: musa一月 22, 2008, 03:45:30 下午


修改的檔案:class/dao/summarystats.class.php(註:此路徑為0.32版,1.0路徑為class/summary/dao/summarystats.class.php)
 找到下面的code:(第272-299行)

引用
    function getRecentArticles( $maxPosts )
    { 
        ........
        while( ($row = $result->FetchRow()) && ($i < $maxPosts) ) {
            if (!in_array($row["blog_id"], $blogs))
             {
                   $blogs[] = $row["blog_id"];
                   array_push( $posts, $articles->_fillArticleInformation($row) );
                   $i++;
             }
        }
        return $posts;
    }

   將紅色的部分刪除或註解掉成為下面的模樣:
 
引用
  function getRecentArticles( $maxPosts )
    { 
        ........
        while( ($row = $result->FetchRow()) && ($i < $maxPosts) ) {
             //if (!in_array($row["blog_id"], $blogs))
             //{
             //     $blogs[] = $row["blog_id"];
                   array_push( $posts, $articles->_fillArticleInformation($row) );
             //      $i++;
             //}
        }
        return $posts;
    }


這樣就大功告成了。

這時,回到你的summary.php頁面,Latest Posts部份應該就會不分blog,依時間顯示最近的15篇文章了。

你可以連到本站的summry頁面看看效果。


強烈建議你搭配mark上述的修改一併使用
但,mark上述修改有小錯誤
mark已於另一篇文章中修正,請自行搜尋參考!
我照你說的修改後,是可以show出最新的文章了,可是怎麼會超過15篇,我現在的summary最新文章,可以show到20篇了,要怎麼改成只要15篇就好了。謝謝,我的是lifetype1.2.5 的。