Affichage ppp
Affichage page par page du contenu : rien de plus simple ;)
Contexte : on a par exemple un blog avec pas mal d'articles, et on veut pas tout afficher d'un coup, de peur de faire fuir le lecteur s'étant perdu sur notre site suite à une recherche google sur "sextoyz"...
Principe : on va découper les catégories en tranches de X articles maximum. On fera une liste de lien quelque part dans la page permettant d'accéder aux autres articles. On donnera un argument supplémentaire à ces liens.
Côté Controller :
$category contiendra donc la catégorie en cours de lecture; $now contiendra la page en cours; $threads servira pour la partie suivante, ainsi que le use Math::Cephes qw(:utils).
On regarde si $now existe. Si oui, c'est qu'on est déjà sur une page au sein de la catégorie (ça peut être 0, 1, 2....). Donc dans ce cas, il faut prendre la tranche d'articles depuis le dernier affiché non-compris. offset indique le nombre de tuples à laisser de côté depuis le PREMIER résultat de la requête. row permet de limiter à X tuples la sortie. Cela revient exactement à
Si $now n'existe pas, on vient d'arriver sur la page de la catégorie, donc simpl, on ordonne comme on veut, on limite à $jump et basta.
Ensuite, vient la mise en place des liens permettant d'accéder aux autres pages.
Pour se faire :
Comme on peut le voir, c'est très simple : il suffit de savoir combien il y a d'articles dans la catégorie, de prendre le plafond de la division par le nombre d'articles à afficher et... rah pis merde, zavez qu'à comprendre le code :->
On blance ce qu'on doit dans $c->stash-stash, kou-roukou-kou... oué, ok.
Bref, on balance dans le TT, qui lui nous fera simplement l'affichage... Et ça, je vous laisse gérer.
# fin du speech. A vous de jouer avec.
Contexte : on a par exemple un blog avec pas mal d'articles, et on veut pas tout afficher d'un coup, de peur de faire fuir le lecteur s'étant perdu sur notre site suite à une recherche google sur "sextoyz"...
Principe : on va découper les catégories en tranches de X articles maximum. On fera une liste de lien quelque part dans la page permettant d'accéder aux autres articles. On donnera un argument supplémentaire à ces liens.
Côté Controller :
use Math::Cephes qw(:utils); my ($self, $c, $category, $now) = @_ ; my $jump = 3; my $threads;
$category contiendra donc la catégorie en cours de lecture; $now contiendra la page en cours; $threads servira pour la partie suivante, ainsi que le use Math::Cephes qw(:utils).
$now = $now || 0 ;
$threads = [
$c->model('mydb::table')->search(
{type => $id_cat},
{order_by => 'id DESC',
rows=>$jump, offset=>$now*$jump
} )
] ;
On regarde si $now existe. Si oui, c'est qu'on est déjà sur une page au sein de la catégorie (ça peut être 0, 1, 2....). Donc dans ce cas, il faut prendre la tranche d'articles depuis le dernier affiché non-compris. offset indique le nombre de tuples à laisser de côté depuis le PREMIER résultat de la requête. row permet de limiter à X tuples la sortie. Cela revient exactement à
select ... from ... where id_cat=... order by id desc, limit $now*$jump, $jump
Si $now n'existe pas, on vient d'arriver sur la page de la catégorie, donc simpl, on ordonne comme on veut, on limite à $jump et basta.
Ensuite, vient la mise en place des liens permettant d'accéder aux autres pages.
Pour se faire :
# get max nb of thread in this category my $max = $c->model('mydb::table')->search( {type => $id_cat} )->count; my $i=0; my $pages; $max = ceil($max/$jump); while ($i<$max) { $pages .= ($i==$now)? '<span class="spacedLinks">'.$i.'</span>' : '<a class="spacedLinks" href="'.$c->uri_for('/blog/part/').$id_cat.'/'.$i.'">'.$i.'</a>'; $i++; }
Comme on peut le voir, c'est très simple : il suffit de savoir combien il y a d'articles dans la catégorie, de prendre le plafond de la division par le nombre d'articles à afficher et... rah pis merde, zavez qu'à comprendre le code :->
On blance ce qu'on doit dans $c->stash-stash, kou-roukou-kou... oué, ok.
Bref, on balance dans le TT, qui lui nous fera simplement l'affichage... Et ça, je vous laisse gérer.
# fin du speech. A vous de jouer avec.