Если вы уже используете SimplePie, вы можете использовать механизм кэширования для кэширования данных фида.
Для объединения статей из внутренних и внешних источников создайте структуру данных со всеми статьями.Это может быть массив всех элементов, отсортированных по метке времени публикации.Затем из этого массива выберите статьи для определенного номера страницы.
Вот некоторый код для создания объединенного массива постов.Это должно дать вам представление о шагах.Класс 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>";
}
Для повышения производительности рассмотрите возможность хранения объединенных статей отдельно и построения страниц из этого.данные.Затем вам необходимо обновлять эти объединенные данные каждый раз, когда новая статья публикуется внутри страны или обновляется кэшированная версия внешнего канала.
Если вам необходимо опубликовать внешний контент вскоре после его публикации на исходном сайте, тогдаЯ бы связался с этими сайтами, чтобы узнать, возможно ли получить уведомление об обновлениях вместо ожидания истечения срока действия кэшированной версии.
РЕДАКТИРОВАТЬ: добавлен пример кода.