web-dev-qa-db-ja.com

カスタムRSSフィードリーダーでのページ分割

特定のRSSフィードを読み取り、フィードのリストを出力するモジュールを作成しました。フィードは次のように読み取られます。

<?php
$FeedURL = $params->get('FeedURL');
$rss     = simplexml_load_file($FeedURL);
if ($rss) {
    $items = $rss->channel->item;
    foreach ($items as $item) {
        $title        = $item->title;
        $published_on = $item->pubDate;
        $description  = $item->description;
        $obs          = $item->children("http://www.example.com/");
        $link         = $obs->files->file[0]->fileurl;
        echo '<h3>' . $title . '</h3>';
        echo '<p>(' . $published_on . ')</p>';
        echo '<p>' . $description . '</p>';
        echo '<p><a href="' . $link . '" target="_blank" class="btn">Download PDF</a></p>';
    }
}
?>

ただし、フィードは一度に最大20アイテムを配信し、後続のアイテムは&pageIndex=2&pageIndex=3などをフィードURLに追加します。現在、モジュールによって表示されるのは最初の20アイテムだけです(フィードには現在約70アイテムがあり、増え続けています)。

フィードに20を超えるアイテムがあるかどうかを確認するようにモジュールを変更するにはどうすればよいですか。そうである場合は、後続のページのアイテムをリストに追加するか、可能であればページネーションを追加します(< Previous そして Next >)?

2
johanpw

アイテム数を決定するには、foreachループの後に次のコードを使用してアイテム数を決定し、それに応じてページネーションナビゲーションを構築します。

If (count($items) > 20) {

    // Determine current page index
    $index = JFactory::getApplication()->input->get('pageIndex', 1, 'integer');

    // pagination logic here
    $pagination = '';
    if ($index >= 2) {

        // need before button, build link using index minus 1 and create link HTML
        $pagination .= "<a href='" . $previousLink . "'>Previous</a>";

    }

     // build after link using index plus 1 and create link HTML
    $pagination .= "<a href='" . $nextLink . '">Next</a>";
}

現在、これはテストされておらず、実際にリンクを構築する必要がありますが、コアロジックはそこにあります。これがお役に立てば幸いです。

2
Brian Bolli