[PHP] Pagination et rewirte url

Résolu/Fermé
coccoweb Messages postés 141 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 17 février 2015 - 6 nov. 2010 à 13:42
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 - 6 nov. 2010 à 15:13
Bonjour,
je me réfère a vous a cause d'une impasse.

J'ai écris cette fonction pour faire une pagination

Celle-ci renvois
PRECEDENT 1 ... 22 23 24 25 26 [27] 28 29 ... 30 SUIVANT

Tout fonctionne très bien.


Venons en au problème :

J'aimerai que le lien de sortie soit ou une URL réécrite (comme maintenant) ou l'URL logique

index.php?action=messagerie/consulter&msgid=1&page=29


J'ai pensé a un preg_replace mais je ne suis pas encore au point pour ça

<?php
/* Pagination simple */
/* $page => (int) numero de page */
/* $nb_total => (int) nombre d'article */
/* $limit => Nombre d'article par page */
/* $msgid => ID du message */
/* $align => Choix de l'alignement */
function Pagination ($page, $nb_total, $limit, $msgid, $align)
{
$page = (int) $page;
$nb_total = (int) $nb_total;
$limit = (int) $limit;
$msgid = (int) $msgid;
$nb_page=ceil($nb_total/$limit); // Nombre de page
$echo = "<p align=".$align.">";
	// Affiche la premiere page
	if ($page-1 >= 0 AND $page-1 <$nb_page)
	{$echo.='&nbsp;<a href="messagerie-consulter-'.$msgid.'-'.($page-1).'">PRECEDENT</a>&nbsp;';}
	if($page > $limit AND $page <$nb_page)
	{$echo.='<a href="messagerie-consulter-'.$msgid.'-0">1</a>&nbsp;...&nbsp;';}
	// Page avant la page
	if ($page-5 >= 0 AND $page-5 <$nb_page) 
	{$echo.='&nbsp;<a href="messagerie-consulter-'.$msgid.'-'.($page-5).'">'.($page-4).'</a>&nbsp;';} 
	if ($page-4 >= 0 AND $page-4 <$nb_page) 
	{$echo.='&nbsp;<a href="messagerie-consulter-'.$msgid.'-'.($page-4).'">'.($page-3).'</a>&nbsp;';}
	if ($page-3 >= 0 AND $page-3 <$nb_page) 
	{$echo.='&nbsp;<a href="messagerie-consulter-'.$msgid.'-'.($page-3).'">'.($page-2).'</a>&nbsp;';} 
	if ($page-2 >= 0 AND $page-2 <$nb_page) 
	{$echo.='&nbsp;<a href="messagerie-consulter-'.$msgid.'-'.($page-2).'">'.($page-1).'</a>&nbsp;';}
	if ($page-1 >= 0 AND $page-1 <$nb_page) 
	{$echo.='&nbsp;<a href="messagerie-consulter-'.$msgid.'-'.($page-1).'">'.($page).'</a>&nbsp;';}
	// Page en cours
	$echo.='&nbsp;['.($page+1).']&nbsp;';
	// Page après la page
if ($page+1 <= $nb_page AND $page+1 <$nb_page) 
	{$echo.='&nbsp;<a href="messagerie-consulter-'.$msgid.'-'.($page+1).'">'.($page+2).'</a>&nbsp;';}
	
	//if ($page+2 <= $nb_page AND $page+2 <$nb_page) {$echo.='&nbsp;<a href="messagerie-consulter-'.$msgid.'-'.($page+1).'">'.($page+2).'</a>&nbsp;';}
	
	if ($page+3 <= $nb_page AND $page+3 <$nb_page)
	{$echo.='&nbsp;<a href="messagerie-consulter-'.$msgid.'-'.($page+2).'">'.($page+3).'</a>&nbsp;';}
	if ($page+4 <= $nb_page AND $page+4 <$nb_page)
	{$echo.='&nbsp;<a href="messagerie-consulter-'.$msgid.'-'.($page+3).'">'.($page+4).'</a>&nbsp;';}
	if ($page+5 <= $nb_page AND $page+5 <$nb_page)
	{$echo.='&nbsp;<a href="messagerie-consulter-'.$msgid.'-'.($page+4).'">'.($page+5).'</a>&nbsp;';}
	if ($page+6 <= $nb_page AND $page+6 <$nb_page)
	{$echo.='&nbsp;<a href="messagerie-consulter-'.$msgid.'-'.($page+5).'">'.($page+6).'</a>&nbsp;';}
	// Affiche les options textuel
	if ($page+3 <= $nb_page){
	$echo.='&nbsp;...&nbsp;<a href="messagerie-consulter-'.$msgid.'-'.($nb_page-1).'">'.($nb_page).'</a>';}
	if($page+1 < $nb_page)
	{$echo.='&nbsp;<a href="messagerie-consulter-'.$msgid.'-'.($page+1).'">SUIVANT</a>';}
	$echo.="</p>";
return $echo;
}
?>



Un grand merci a ceux et celles qui pourront m'aider

2 réponses

avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
6 nov. 2010 à 15:13
Tu as plusieurs solutions :

- Créer une fonction pour chaque cas
- Créer une fonction qui se charge de retourner l'URL générée en fonction des paramètres (comme je l'ai fait dans mon script).
- T'amuser à faire des if/else pour chaque lien dans ta fonction
1
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
6 nov. 2010 à 14:06
Salut.

« J'aimerai que le lien de sortie soit ou une URL réécrite (comme maintenant) ou l'URL logique »

Désolé mais je ne comprends pas ce que tu cherches à faire.
Tu veux que le lien pointe vers l'URL réécrite ou sur l'URL par défaut ?
Parce qu'on ne peut pas faire les deux en même temps ...


Au passage, voilà une fonction que j'ai codé :
https://www.commentcamarche.net/faq/20420-php-pagination
Tu peux facilement modifier l'URL générée.
0
coccoweb Messages postés 141 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 17 février 2015 27
6 nov. 2010 à 14:16
Dans URL son possible
une logique "index.php?action=messagerie/consulter&msgid=1&page=29"
une réécrite "messagerie-consulter-1-29"

Dans l'admin, il est possible de choisir l'une ou l'autre.

Je pensai a un système qui ferai un truc du genre


index.php?action=messagerie/consulter&msgid=$1&page=$2"

messagerie-consulter-$1-$2"
0