如果您已經使用了SimplePie那麼你可以使用它的caching mechanism有緩存的飼料數據。
要合併來自內部和外部來源的文章,請創建包含所有文章的數據結構。這可以是按發佈時間戳排序的所有項目的數組。然後從這個數組中選擇一個特定頁碼的文章。
這裏有一些代碼來創建一個組合的帖子數組。這應該讓您瞭解所涉及的步驟。 Post類代表一個職位。內部和外部帖子轉換爲帖子並存儲在數組$ posts。這個數組按時間戳排序,最後所有的帖子都被回顯。
$ internalPosts必須包含職位形成系統和$ feedUrls外部飼料的URL的。由於我不知道內部帖子的結構,所以您必須調整內部帖子轉換爲通用帖子的部分。
$internalPosts = array();
$feedUrls = array();
include_once 'simplepie.inc';
class Post {
public $title;
public $link;
public $description;
public $publishedAt;
public function __construct($title, $link, $description, $publishedAt) {
$this->title = $title;
$this->link = $link;
$this->description = $description;
$this->publishedAt = $publishedAt;
}
}
$posts = array();
// Convert internal posts to generic post.
foreach($internalPosts as $item){
$posts[] = new Post($item->title, $item->link, $item->description, $item->publishedAt);
}
// Retrieve feeds and add posts.
$feed = new SimplePie();
foreach($feedUrls as $url){
$feed->set_feed_url($url);
$feed->init();
foreach ($feed->get_items() as $item) {
$posts[] = new Post($item->get_title(), $item->get_link(), $item->get_description(), $item->get_date('U'));
}
}
// Sort function.
function byPublicationTimestamp($itemA, $itemB){
return ($itemB->publishedAt - $itemA->publishedAt);
}
usort($posts, 'byPublicationTimestamp');
foreach($posts as $post){
echo "<p><a href='$post->link'>$post->title</a><br/>" . date('l, j F Y', $post->publishedAt) . " - $post->description</p>";
}
爲了提高性能,請考慮單獨存儲組合的文章並從這些數據中構建頁面。然後,您需要隨時在內部發布新文章或刷新外部Feed的緩存版本時更新此組合數據。
如果您需要在原始網站發佈後不久發佈外部內容,那麼我會聯繫這些網站以查看是否可以獲取更新通知,而不是等待緩存版本過期。
編輯:添加示例代碼。
感謝您的回覆! - 我不喜歡選項1(儘管這會是最簡單的),因爲每次更改頁碼時都需要獲取所有數據。我不需要立即發佈外部內容,所以我相信使用緩存過期將是最好的方式。你能否提供一個選項2概念代碼的小樣本?它不需要工作,只是一小段代碼解釋如何做到這一點。在此先感謝 – Kristian 2010-08-13 19:16:43
您的意思是創建一個組合的文章陣列? – Kwebble 2010-08-13 20:44:05
是的。我的麻煩在於如何處理外部帖子並以正確的方式連接它們。 – Kristian 2010-08-13 20:54:55