Fonction de pagination simple

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 975 fois - Téléchargée 24 fois

Contenu du snippet

Bon ben c'est ma première source ici alors me frappez pas trop fort XD.

C'est une fonction de pagination comme on en voit partout mais ça pourra peut être aidé certain comme je pense (c'est mon avis ça hein =x) quelle est pas trop dégueulasse ;p.

Source / Exemple :


<?php
/**

  • Fonction créant une pagination
*
  • @param int $nb_data le nombre de donnée
  • @param int $data_per_page le nombre de donnée sur une seule page
  • @param int $nb_link_per_page nombre de liens affiché sur les cotés de la page courante
  • @param string $url l'url de la page actuelle
  • @param bool $url_rewriting activation de l'url rewriting
  • @param string $var_page nom de la variable $_GET
  • @param string $display contenu s'affichant avant les numéros des pages
  • @return array
  • /
function pagination($nb_data, $data_per_page = 10, $nb_link_per_page = 5, $url = '', $url_rewriting = false, $var_page = 'page', $display = '') { $data_per_page = is_numeric($data_per_page) ? $data_per_page : 10; if ($nb_data > 0 && $nb_data > $data_per_page) { $nb_pages = ceil($nb_data / $data_per_page); $current_page = !empty($_GET[$var_page]) && is_numeric($_GET[$var_page]) && $_GET[$var_page] < $nb_pages + 1 ? $_GET[$var_page] : 1; $start_page = ($current_page - 1) * $data_per_page; if ($url_rewriting) { $link = $url; $next_page = sprintf($url, $current_page + 1); $previous_page = sprintf($url, $current_page - 1); $first_page = sprintf($url, 1); $last_page = sprintf($url, $nb_pages); } else { $link .= strstr($url, '?') ? '&amp;' : '?'; $link .= $var_page . '='; $next_page = $link . ($current_page + 1); $previous_page = $link . ($current_page - 1); $first_page = $link . 1; $last_page = $link . $nb_pages; } if ($current_page != 1) { $display .= ' <a href="' . $first_page . '" title="Première page"><<</a> '; $display .= ' <a href="' . $previous_page . '" title="Page précédente"><</a> '; } for ($i = 1; $i <= $nb_pages; $i++) { if ($i - 1 < $current_page + $nb_link_per_page && $i + 1 > $current_page - $nb_link_per_page) { if ($i == $current_page) { $display .= ' <span>' . $i . '</span> '; } else { if ($url_rewriting) { $url = sprintf($link, $i); } else { $url = $link . $i; } $display .= ' <a href="' . $url . '" title="Page ' . $i . '">' . $i . '</a> '; } } } if ($current_page != $nb_pages) { $display .= ' <a href="' . $next_page . '" title="Page suivante">></a> '; $display .= ' <a href="' . $last_page . '" title="Dernière page">>></a> '; } $pagination = array( 'nb_data' => $nb_data, 'nb_pages' => $nb_pages, 'start_page' => $start_page, 'data_per_page' => $data_per_page, 'current_page' => $current_page, 'display' => $display ); return $pagination; } else { return null; } } /* Petit exemple d'utilisation */ $datas = array(); for ($i = 1; $i <= 10000; $i++) { $datas[] = 'niah_' . $i; } // Avec url rewriting $pagination = pagination(count($datas), 20, 10, 'index-%s.html', true, 'p', 'Pages : '); // Sans url rewriting $pagination = pagination(count($datas), 20, 10, $_SERVER['PHP_SELF'], false, 'p', 'Pages : '); $datas = array_slice($datas, $pagination['start_page'], $pagination['data_per_page']); foreach ($datas as $data) { echo $data . '<br />'; } echo '<br />' . $pagination['display']; ?>

A voir également

Ajouter un commentaire

Commentaires

Messages postés
23
Date d'inscription
vendredi 14 avril 2006
Statut
Membre
Dernière intervention
14 janvier 2010

J'aurai tendance à dire qu'il y a un problème dans le cas où le paramètre '$url_rewriting' de cette fonction est à 'true' : dans ce cas là la valeur '$current_page' n'est pas récupérée.

Je propose donc de changer la ligne 12 :

$current_page = !empty($_GET[$var_page]) && is_numeric($_GET[$var_page]) && $_GET[$var_page] < $nb_pages + 1 ? $_GET[$var_page] : 1;


par le code suivant :

if ($url_rewriting)
{
$url_detaillee = explode("/", $_SERVER["REQUEST_URI"]);
$current_page = !empty($url_detaillee[count($url_detaillee)-1]) && is_numeric($url_detaillee[count($url_detaillee)-1]) && $url_detaillee[count($url_detaillee)-1] < $nb_pages + 1 ? $url_detaillee[count($url_detaillee)-1] : 1;
}
else $current_page = !empty($_GET[$var_page]) && is_numeric($_GET[$var_page]) && $_GET[$var_page] < $nb_pages + 1 ? $_GET[$var_page] : 1;

Quelque soit l'option '$url_rewriting', on obtient toujours '$current_page'. Et l'affichage de la pagination se fait correctement (page en cours en gras).
Messages postés
1
Date d'inscription
jeudi 18 octobre 2007
Statut
Membre
Dernière intervention
24 décembre 2009

bonsoir
je suis débutant en php et html ...merci pour le poste
je voudrez savoir ou je place ce code php et comment l'intégrer dans ma page web et est ce que je met le code dans tout mes autre pages ?
merci
Messages postés
2
Date d'inscription
lundi 21 juillet 2008
Statut
Membre
Dernière intervention
24 février 2009

Bonjour, dabord merci pour ce script.
voila, j'ai un probleme. j'affiche des articles contenus dans ma BDD.
ces articles sont 3, le probleme c'est qu'a chaque page il m'affiche mes 3 articles et moi je voudrais qu'il n'y en ai qu'un par page.
j'utilise un mysql fetch array dans la boucle for ($i = 1; $i <= 10000; $i++) mais je ne sait pas comment l'adapter

Merci de m'eclairer
Messages postés
38
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
28 novembre 2007

"notre cher Windaube". Encore un commentaire constructif inutile.. surtout que tu as développé du code pour win32 et que tu dois tourner dessus certainement.
Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009

Malalam > forcement... lol
Maintenant je capte ^^
Merci ;-)
Afficher les 23 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.