J'ai construit un module pour lire un flux RSS spécifique et générer une liste des flux. Le flux se lit comme ceci:
<?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>';
}
}
?>
Mais le flux fournit jusqu'à 20 éléments à la fois, et les éléments suivants sont obtenus en ajoutant &pageIndex=2
, &pageIndex=3
etc. à l'URL du flux. Actuellement, seuls les 20 premiers éléments sont affichés par le module (le flux contient actuellement environ 70 éléments et est en croissance).
Comment puis-je modifier mon module pour vérifier si le flux contient plus de 20 éléments, et si c'est le cas, ajoutez les éléments des pages suivantes à la liste ou, si possible, ajoutez une pagination (< Previous et Next >)?
Pour déterminer le nombre d'éléments, vous pouvez simplement utiliser ce qui suit après la boucle foreach pour déterminer le nombre d'éléments et construire la navigation de pagination en conséquence:
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>";
}
Maintenant, ceci n’a pas été testé et vous oblige à construire réellement les liens, mais la logique de base est là. En espérant que ça aide, bonne chance!