SimplePie 对 SimplePie::merge_items() 中的每个项目进行显式检查,以确定是否有任何项目缺少日期。
您必须重写此方法才能更改多页进纸的排序行为。以下是对多页进纸进行排序的替代方法,即使项目缺少日期也是如此。如果项目缺少日期,则将其排序到底部。(使用 SimplePie 1.3)。
class SimplePieAlwaysSort extends SimplePie
{
public function get_items($start = 0, $end = 0)
{
if (!isset($this->data['items']))
{
if (!empty($this->multifeed_objects))
{
$this->data['items'] = self::merge_items($this->multifeed_objects, $start, $end, $this->item_limit);
}
}
return parent::get_items($start, $end);
}
public static function merge_items($urls, $start = 0, $end = 0, $limit = 0)
{
if (is_array($urls) && sizeof($urls) > 0)
{
$items = array();
foreach ($urls as $arg)
{
if ($arg instanceof SimplePie)
{
$items = array_merge($items, $arg->get_items(0, $limit));
}
else
{
trigger_error('Arguments must be SimplePie objects', E_USER_WARNING);
}
}
usort($items, array(get_class($urls[0]), 'sort_items'));
if ($end === 0)
{
return array_slice($items, $start);
}
else
{
return array_slice($items, $start, $end);
}
}
else
{
trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING);
return array();
}
}
}
$pie = new SimplePieAlwaysSort();
$pie->set_feed_url(array('http://stackoverflow.com/feeds'));
$pie->init();
foreach ($pie->get_items() as $item)
{
// do stuff
}