Fonction page en page particulière

ccsuperstar
Invité n'ayant pas de compte PHPfrance

12 sept. 2008, 16:54

Bonjour à tous,

Dans le cadre de mon travail, je dois développer une fonction de pagination particulière, qui doit s'adapter aux contraintes SEO.
Pour certaines pages du site, on affiche actuellement le page en page complet, et l'on peut avoir jusqu'à 100 pages!!!
Il faut donc que j'optimise cela et mon cahier des charges est assez complexe, enfin pour moi...

Je vous mets une image de ce que je suis censée avoir

Si vous avez une idée de fonction pour obtenir ce type de page en page, je suis preneuse!!

Merci beaucoup

Image[/img]

Eléphant du PHP | 169 Messages

12 sept. 2008, 17:05

Tu n'auras ni de fonctions toutes faites ici, ni un debuggage de fonctions trouvées sur le net.
Par contre si tu post ton code, de nombreuses personnes pourront t'aider.


(J'ai juste ?)

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

12 sept. 2008, 17:09

(J'ai juste ?)
T'as tout bon. :pouce:

En langage modérateur, on dit comme ça :

Modération :
PHPFrance n'est pas un site de distribution de scripts gratuits,
ni de débuggage de scripts téléchargés et utilisés sans compréhension.

Merci de prendre le temps de lire les règlements.

ccsuperstar
Invité n'ayant pas de compte PHPfrance

12 sept. 2008, 17:20

Voici ma fonction, pour la partie unité et dizaine ça à l'air de tourner mais par contre pour les centaines, je galère un peu plus
Si vous voyez des choses à modifier

Merci
function pager($params) {
    $pagescount = ceil($params['count']/$params['limit']);
    //echo $pagescount;
    $currpage = $_GET['page'];

    if($params['count'] == 0) return '1';
	//echo $currpage;

//3 page_range : page_range_avant < page_range(pagecourante) < page_range_apres
$pages_range_avant ;
$pages_range_courant;
$pages_range_apres;

	$nbchiffres_pagecourante = strlen($currpage);
	if($nbchiffres_pagecourante==1){ //on est entre 1 et 9
		$pages_range_avant=array();

		if($pagescount<10){
			$pages_range_courant = range(1, $pagescount ,1);
			$pages_range_apres = '';
		} else {
			$pages_range_courant = range(1, 9 ,1);

			if($pagescount - $currpage < 20){
				$pages_range_apres = range(10, 10 ,1);
			} else {
				$pages_range_apres = range(10, $pagescount ,10);
			}
		}

	} elseif($nbchiffres_pagecourante==2) {
		//on choppe la dizaine
		$dizaine = substr($currpage, 0, 1);
		$unite = substr($currpage, 1, 1);
		$pages_range_avant = array(1) + range(0, $currpage, 10);
		echo $pagescount - $currpage;

		if($pagescount - $currpage == 0){
			$pages_range_courant = array($pagescount);
			$pages_range_apres = '';
		} elseif($pagescount - $currpage < 10){
			$pages_range_courant = range($dizaine.'1'	, $pagescount ,1) + array($pagescount);
			$pages_range_apres = array();
		} elseif($pagescount - $currpage>=10 && $pagescount - $currpage < 20){
			$pages_range_courant = range($dizaine.'1'	, $dizaine.'9' ,1) + array($pagescount);

			$pages_range_apres = array(((substr($currpage, 0, 1)+1).'0'));
		} else {

			$pages_range_courant = range($dizaine.'1', $dizaine.'9' ,1);
			$pages_range_apres = range(($dizaine+1).'0', $pagescount ,10) + array($pagescount);


		}

		//echo '$pages_range_courant=' .print_r($pages_range_courant)."\n";

		//echo '$pages_range_apres=' .print_r($pages_range_apres)."\n";
	} elseif($nbchiffres_pagecourante==3) {
		//on choppe la centaine
		$centaine = substr($currpage, 0, 1);
		$dizaine = substr($currpage, 1, 1);
		$unite = substr($currpage, 2, 2);

		$nb_reste_pages = $pagescount - $currpage;


		$pages_range_avant = array(1) + range(0, $currpage, 10);

		if($nb_reste_pages == 0){
			$pages_range_courant = '';
			$pages_range_apres = '';
		} elseif($nb_reste_pages < 20){
			$pages_range_courant = range($centaine.$dizaine.'1', $centaine.$dizaine.'9' ,1);
			if(($dizaine == 9 && $unite == 9) || $dizaine == 9){
				$pages_range_apres = range((($centaine+1).'00'), $pagescount ,10) + array($pagescount);
			} else {
				$pages_range_apres = range(($centaine.($dizaine+1).'0'), $pagescount ,1) + array($pagescount);

			}

		} else {
			$pages_range_courant = range($centaine.$dizaine.'1', $centaine.$dizaine.'9' ,1);
			if(($dizaine == 9 && $unite == 9) || $dizaine == 9){
				$pages_range_apres = range((($centaine+1).'00'), $pagescount ,10) + array($pagescount);
			} else {
					$pages_range_apres = range(($centaine.($dizaine+1).'0'), $pagescount ,10) + array($pagescount);

			}

		}


		/**/
	}
    $src = '';


foreach($pages_range_avant as $number) {
    $src .= ' <a href="'.$params['src'].$number.'" class="pager" onclick="'.$params['onclick'].'">'.$number.'</a> ';
}
$src .=  ' - ';
if(!empty($pages_range_courant)){
foreach($pages_range_courant as $number) {
    $src .= ' <a href="'.$params['src'].$number.'" class="pager" onclick="'.$params['onclick'].'">'.$number.'</a> ';
}
}
$src .=  ' - ';
if(!empty($pages_range_apres)){
foreach($pages_range_apres as $number) {
    $src .= ' <a href="'.$params['src'].$number.'" class="pager" onclick="'.$params['onclick'].'">'.$number.'</a> ';
}
}
    return $src;
}

$params['count'] = 3569;
$params['limit']=20;
$params['from']=$_GET['page'];
$params['src'] ='/test_pager2.php?page=';
$params['onclick'] ='';
echo pager($params);