3

codeigniterを使用していくつかのrssフィードをループするようにsimplepieを取得しようとしていますが、配列内の最後のフィードからのフィード項目を表示するためにのみ取得できます。

_get_feed関数のforeachループに関係していると思いますが、私が試したすべての方法で修正できませんでした。

私のコントローラーにはこれがあります

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; ?>

set_feed_url関数を使用して解析するフィードの配列をsimplepieに与えることができることは知っていますが、すべてのフィード項目が一緒に混合されるため、これは行いたくありません。

また、コントローラーに_get_feed関数を配置しても、ベストプラクティスの観点から問題がないかどうか、またはデータをフェッチしているモデルに配置したほうがよいかどうかを知りたいですか?

4

1 に答える 1

3

私の知る限り、$ data配列はグローバルではなかったため、インデックス関数内にのみスコープがありました。

慣例に関する限り、私はデータベース接続にモデルのみを使用しますが、厳格なルールはないと思います。

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

したがって、1番目のフィードの最初の記事からタイトルにアクセスするには:

$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;
}

}
于 2010-07-25T21:19:45.897 に答える