gpt4 book ai didi

php - 在带有 codeigniter 的 simplepie 中使用多个提要

转载 作者:搜寻专家 更新时间:2023-10-31 20:55:18 25 4
gpt4 key购买 nike

我试图让 simplepie 使用 codeigniter 循环访问一些 rss 提要,但我只能让它显示数组中最后一个提要的提要项目。

我认为这与 _get_feed 函数中的 foreach 循环有关,但我尝试过的所有方法都无法修复它。

在我的 Controller 中我有这个

class Main extends Controller{

function index()
{
$this->load->library( 'Simplepie' );

$feed_urls = array
(
'http://feeds.feedburner.com/SputnikmusicNews',
'http://feeds2.feedburner.com/nmecom/rss/newsxml',
);

foreach ($feed_urls as $feed_url)
{
$data = $this->_get_feed($feed_url);
}

$data['main_content'] = 'main_view';
$this->load->view('includes/template', $data);
}

function _get_feed($url)
{
$feed = new SimplePie();
$feed->set_feed_url($url);
$feed->init();

$count = 0;

foreach($feed->get_items() as $item)
{
$data['feed'][$count]['title'] = $item->get_title();
$data['feed'][$count]['permalink'] = $item->get_permalink();
$count ++;
}
return $data;
}

}

然后在我看来我有这个

<?php foreach($feed as $item) : ?>
<br />
<a href="<?php echo $item['permalink']; ?>"><?php echo $item['title']; ? ></a>
<?php endforeach; ?>

我知道可以为 simplepie 提供一组供稿以使用 set_feed_url 函数进行解析,但我不想这样做,因为它会将所有供稿项目混合在一起。

我还想知道将 _get_feed 函数放在 Controller 中是否符合最佳实践,还是放在模型中会更好,因为它正在获取数据?

最佳答案

据我所知,您的 $data 数组不是全局的,因此仅在 index 函数内有作用域。

就惯例而言,我只对数据库连接使用模型,但我认为没有任何硬性规定。

class Main extends Controller{

function index()
{
$this->load->library( 'Simplepie' );

$feed_urls = array
(
'http://feeds.feedburner.com/SputnikmusicNews',
'http://feeds2.feedburner.com/nmecom/rss/newsxml',
);

foreach ($feed_urls as $feed_url)
{
$data['feed'][] = $this->_get_feed($feed_url);
}

$data['main_content'] = 'main_view';
$this->load->view('includes/template', $data);
}

function _get_feed($url)
{
$feed = new SimplePie();
$feed->set_feed_url($url);
$feed->init();

$count = 0;

foreach($feed->get_items() as $item)
{
$return[$count]['title'] = $item->get_title();
$return[$count]['permalink'] = $item->get_permalink();
$count ++;
}
return $return;
}

}

这会给你:

$data['feed'][0] = details from 1st url
$data['feed'][1] = details from 2nd url

因此,要访问第一个提要中第一篇文章的标题:

$data['feed'][0][0]['title']
//or within the view
$feed[0][0]['title'];

如果您想将 URL 合并在一起,您可以这样做:

class Main extends Controller{

function index()
{
$this->load->library( 'Simplepie' );

$feed_urls = array
(
'http://feeds.feedburner.com/SputnikmusicNews',
'http://feeds2.feedburner.com/nmecom/rss/newsxml',
);

foreach ($feed_urls as $feed_url)
{
$feed_info[] = $this->_get_feed($feed_url);
$data['feed'][] = $this->_get_feed($feed_url);
}

foreach ($feed_info as $feed)
{
foreach($feed as $feed_item)
{
$data['feed'][] = array( 'title' => $feed_item->get_title(), 'permalink' => $feed_item->get_permalink() );
}
}

$data['main_content'] = 'main_view';
$this->load->view('includes/template', $data);
}

function _get_feed($url)
{
$feed = new SimplePie();
$feed->set_feed_url($url);
$feed->init();

return $feed;
}

}

关于php - 在带有 codeigniter 的 simplepie 中使用多个提要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3330980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com