特定の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 >)?
アイテム数を決定するには、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>";
}
現在、これはテストされておらず、実際にリンクを構築する必要がありますが、コアロジックはそこにあります。これがお役に立てば幸いです。