web-dev-qa-db-fra.com

Pagination dans un lecteur de flux RSS personnalisé

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

2
johanpw

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!

2
Brian Bolli