Gérer une pagination dans une application Dancer.

Lorsqu'on souhaite afficher un flux de données important sur une page, il peut-être intéressant de gérer une pagination. Ceci apportera deux avantages, le premier d'un point de vue utilisateur, il sera plus facile pour une personne de visualiser un petit flux de données et de pas avoir une page trop longue, le deuxième d'un point de vue performance, une page avec un flux très important sera longue à charger. Nous allons découvrir comment résoudre le problème facilement pour une application Dancer. Il existe pour répondre à ça un plugin pour template-toolkit appelé Template::Plugin::Pagination. Il est développé par Tony Bowden, il dépend de Data::Pageset développé par Leo Lapworth.
    sudo cpanm Template::Plugin::Pagination
Du côté contrôleur c'est-à-dire les package Perl, il faudra rendre accessible deux variables au template.
    template 'index', {
        current_page     => params->{page},
        entries_per_page => 20,
        data             => $data
    };
La première current_page, va récupérer le paramètre en query_string passer à l'url, par exemple ?page=2, et entries_per_page représente le nombre de données qu'on souhaite afficher par page.
    <% USE page = Pagination(data, current_page, entries_per_page) %>

    
    <% FOREACH item IN page.page_data %>
  • <% item %>
  • <% END %>
First page: First page <% IF page.previous_page %> Prev page: <% page.previous_page %> <% END %> <% IF page.next_page %> Next page: <% page.next_page %> <% END %> Last page: Last page
On importe le plugin en passant à la fonction Pagination les informations utile, la variable contenant les données, la page courante, et le nombre d'entrée par page. Ensuite il est possible de boucler sur l'objet page qui contient notamment les données, dans page_data. En conclusion, voici un moyen simple pour gérer une pagination dans une application Dancer. Il est possible de voir un exemple via Dancer-App-Pagination-Example disponible sur github, réalisé par sukria l'auteur initial de Dancer. Drapeau EnProjet sur le CPAN Drapeau EnDancer-App-Pagination-Example sur github
Vus : 803
Publié par Hobbestigrou : 195