Fonction de pagination en PHP

Article ajouté le 25/12/2018

Fonction de pagination en PHP

Lorsqu'on veut diviser une page en plusieurs parce qu'on a trop de contenu à afficher, avoir une pagination avec des numéros de pages peut être très utile.

Pour ma part, j'utilise assez régulièrement la même fonction qui n'est peut-être pas très optimisée mais qui fait clairement le job qu'on lui demande à savoir parcourir les pages par le biais de flèches et de numéros.

Grâce à cette fonction que j'ai trouvé sur le web puis modifié, on peut donc facilement se rendre en page suivante ou précédente, en dernière ou en première page,  et dans les pages qui précédent ou succèdent la page courante.

La fonction PHP

<?php
	function numero_page($nbresult, $per_page=15, $page=1, $url, $version='desktop')
	{
		global $nextpage;
		global $urlnextpage;
		global $urlprevpage;
	
		// Récupération et traitement de l'url courrante en supprimant la variable "p"
		$url = str_replace('&p=', '[*p=]', $url);
		$url = str_replace('?p=', '[!p=]', $url);
		$url = str_replace('&p', '&[p]', $url);
		$url = str_replace('?p', '?[p]', $url);
		$url = str_replace('[*p=]', '&p=', $url);
		$url = str_replace('[!p=]', '?p=', $url);
		$url = preg_replace('/&p(=[^&]*)?|^p(=[^&]*)?&?/', '', $url);
		$url = preg_replace('/&p(=[^&]*)?|^p(=[^&]*)?&?/', '', $url);
		$url = preg_replace('/\?p(=[^&]*)?|^p(=[^&]*)?&?/', '', $url);
		$url = str_replace('&[p]', '&p', $url);
		$url = str_replace('?[p]', '?p', $url);
		$url = str_replace('&', '&', $url);
		$separator = '&';
		if(strrpos($url, '?') === false){ $separator = '?'; }
		$url = $url.$separator;
		
		$adjacents = "2";
		
		$prevlabel = "‹";
		$nextlabel = "›";
		
		$page = ($page == 0 ? 1 : $page); 
		$start = ($page - 1) * $per_page;                              
		 
		$prev = $page - 1;                         
		$next = $page + 1;
		 
		$lastpage = ceil($nbresult/$per_page);
		 
		$lpm1 = $lastpage - 1; // //last page minus 1
		 
		$pagination = "";
		if($lastpage > 1){
			$pagination .= "<div class=\"separator\"></div><ul class=\"pagination\">";
				 
				if ($page > 1){
					$pagination.= "<li><a href=\"{$url}p={$prev}\">{$prevlabel}</a></li>";
					$urlprevpage = "{$url}p={$prev}";
				}
				 
			if ($lastpage < 7 + ($adjacents * 2)){  
				for ($counter = 1; $counter <= $lastpage; $counter++){
					if ($counter == $page)
						$pagination.= "<li><a class=\"current\">{$counter}</a></li>";
					else
						$pagination.= "<li><a href=\"{$url}p={$counter}\">{$counter}</a></li>";                   
				}
			 
			} elseif($lastpage > 5 + ($adjacents * 2)){
				 
				if($page < 1 + ($adjacents * 2)) {
					 
					for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++){
						if ($counter == $page)
							$pagination.= "<li><a class=\"current\">{$counter}</a></li>";
						else
							$pagination.= "<li><a href=\"{$url}p={$counter}\">{$counter}</a></li>";                   
					}
					$pagination.= "<li><a href=\"{$url}p={$lastpage}\">››</a></li>";
						 
				} elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) {
					 
					$pagination.= "<li><a href=\"{$url}p=1\">‹‹</a></li>";
					for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++) {
						if ($counter == $page)
							$pagination.= "<li><a class=\"current\">{$counter}</a></li>";
						else
							$pagination.= "<li><a href=\"{$url}p={$counter}\">{$counter}</a></li>";                   
					}
					$pagination.= "<li><a href=\"{$url}p={$lastpage}\">››</a></li>";     
					 
				} else {
					 
					$pagination.= "<li><a href=\"{$url}p=1\">‹‹</a></li>";
					for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++) {
						if ($counter == $page)
							$pagination.= "<li><a class=\"current\">{$counter}</a></li>";
						else
							$pagination.= "<li><a href=\"{$url}p={$counter}\">{$counter}</a></li>";                   
					}
				}
			}
			 
				if($page<$counter-1)
				{
					$pagination.= "<li><a href=\"{$url}p={$next}\">{$nextlabel}</a></li>";
					$urlnextpage = "{$url}p={$next}";
					
					if(isset($_GET['nbpp']) && $_GET['nbpp']=='all')
					{
						$nextpage = "<a class=\"nextlink\" href=\"{$url}p={$next}\">{$nextlabel}</a>";
					}
				}
			 
			$pagination.= "</ul>";       
		}
		 
		return $pagination;
	}
?>

Poster un commentaire

Commentaire

Nom

Adresse e-mail

Votre adresse e-mail n'est pas publiée lorsque vous ajoutez un commentaire.
Tous les champs sont obligatoires pour soumettre votre commentaire.


Outils et techniques de développement

Il existe de nombreuses manières de concevoir un site Internet.

Certains optent pour des outils clés en main et d'autres préfèrent utiliser des solutions faites maison. Le choix n'est pas toujours évident et lorsqu'on y connait rien, il est préférable de se tourner vers un vrai expert.

Découvrez les techniques que j'utilise et quelques-uns des outils qui permettent de rapidement disposer d'un site Web.

Outils et techniques