2005年11月9日 星期三

在摘要頁面顯示的公告 Part 3

針對新增到 SummaryDefaultAction 類別的新功能,會用到的 API 有:

  • 全域設定裡的 default_blog_id 取得網站管理員 blog ID。
    因為 SummaryDefaultAction 類別裡已經有 _config 屬性,內容實際上為 config 物件,可以取得全站系統管控裡的所有設定值,只要像下面這樣的寫法就可以取得 default_blog_id 的值。第二個參數 1 ,代表若沒有 default_blog_id 時,則傳回 1 。預設傳回值是 null 。

$this->_config->getValue( "default_blog_id", 1 );

  • 摘要設定裡的 summary_announce_category_id 取得最新消息文章類別的 category ID。
    這 個設定值的取用方法同上,但是 LifeType 預設是沒有這個設定值的,我們要自己加上去。為了方便測試,可以手動在資料庫的 plog_config 資料表裡手動先加上這個設定值。可以使用下面的 SQL 敘述完成,其中 13 是最新消息的文章分類 ID ,3 則是 LifeType 內定的資料類型編號。若沒有手動加入這個設定值也沒關係,後面會在摘要設定頁面加上這個選項的設定欄位,讓我們直接從管理介面中設定。

INSERT INTO `plog_config` ( `id` , `config_key` , `config_value` , `value_type` )
VALUES (

'' , 'summary_announce_category_id' , '13' , '3'

) ;

  • 限制最新消息的數目設定值,取用自摘要設定裡的 summary_page_show_max ,這個值同時被使用在限制最新網誌最活躍的網誌最新的文章最多回響的文章最多人閱讀的文章項目。這個值已經被存入 SummaryDefaultAction 類別的 _numPosts 屬性,直接取用即可。
  • 取得最新消息文章,要使用 Articles 類別的 getBlogArticles 方法。getBlogArticles 方法可以讓我們指定 blog ID 、 文章分類 ID 、 文章狀態來取得文章的 article 陣列,並且可以限制取得的文章數目。用法如下:(沒說明的參數使用預設值即可。)

$articles = new Articles();
$posts = $articles->getBlogArticles( blogId, -1, 取得文章數目, 文章分類ID, 文章狀態 );

然後,我們就可以修改 class/summary/action/summarydefaultaction.class.php 檔案,加入我們要的功能(節錄新增的部份):

    //引入需要的類別定義檔
include_once( PLOG_CLASS_PATH."class/dao/articles.class.php" );
include_once( PLOG_CLASS_PATH."class/dao/articlecategories.class.php" );

//取得網站管理員的 blogId 和最新消息的文章分類 categoryId
$siteAdminBlogId = $this->_config->getValue( "default_blog_id", 1);
$siteAnnounceCategoryId = $this->_config->getValue( "summary_announce_category_id", 1);

//取得最新消息文章物件陣列,最多文章數目直接使用 _numPosts 屬性
$articles = new Articles();
$announcePosts = $articles->getBlogArticles( $siteAdminBlogId, -1, $this->_numPosts, $siteAnnounceCategoryId, POST_STATUS_PUBLISHED );

//取得最新消息的文章分類 category 物件
$categories = new ArticleCategories();
$announceCategory = $categories->getCategory( $siteAnnounceCategoryId, $siteAdminBlogId );

//將最新消息的文章物件陣列及文章分類物件傳送給 Smarty 樣版引擎
$this->_view->setValue( "announces", $announcePosts );
$this->_view->setValue( "annCategory", $announceCategory );

加入以上的程式碼後,摘要頁面首頁的樣版中已經可以用 $announces 和 $annCategory 物件顯示最新消息了。

待續....

沒有留言:

張貼留言