8791 sujets

Développement web côté serveur, CMS

Voila j'ai ceci
"1 2 3 4 5 6 7 8 9 10 11 12 suivant"

et j'aimera cela
"1 2 3 4 5 6 ...suivant"

J'ai le code ci-dessous en class....merci de votre aide les amis



<?php 

class archive{

	public $compteur;
	public $compteurParPage;
	public $arrayArchive;
	public $page;

	function __construct($array,$page,$parPage = 1){
		$compteur = 0;
		$arrayArchive = array();
		
		foreach($array as $itemArchive){
			$compteur++;
			if($compteur <= ($page*$parPage)+$parPage && $compteur > ($page*$parPage)){
				$arrayArchive[] = $itemArchive;
			}
		}
		$this->page = $page;
		$this->compteur = $compteur;
		$this->compteurParPage = $parPage;
		$this->arrayArchive = $arrayArchive;
	}
	
	public function createPaging($class = null, $request = null){
		$i = 0;
		if($this->page > 0){
			if($request == null){$linkPrec = "?pg=".(($this->page)-1);}
			else{$linkPrec = "?pg=".(($this->page)-1).$request;}
			$lienPrecedent = "<a href='".$linkPrec."'"; 
			if($class != null){$lienPrecedent .= " class='".$class."'>"; }
			else{$lienPrecedent .= ">";}
			$lienPrecedent .= "Précédent</a>";
			$pagingArray["precedent"] = $lienPrecedent;
		}else{
			$pagingArray["precedent"] = "";
		}
		if($this->compteur > ($this->page*$this->compteurParPage)+$this->compteurParPage){
			if($request == null){$linkSuiv = "?pg=".(($this->page)+1);}
			else{$linkSuiv = "?pg=".(($this->page)+1).$request;}
			$lienSuivant = "<a href='".$linkSuiv."'"; 
			if($class != null){$lienSuivant .= " class='".$class."'>"; }
			else{$lienSuivant .= ">";}
			$lienSuivant .= "Suivant</a>";
			$pagingArray["suivant"] = $lienSuivant;
		}else{
			$pagingArray["suivant"] = "";
		}
		if($this->compteur > $this->compteurParPage){
			while($i < $this->compteur/$this->compteurParPage){
				if($this->page != $i){
					if($request == null){
						$lien = "<a href='?pg=".$i."'";
					}else{
						$lien = "<a href='?pg=".$i.$request."'";
					}
				}else{
					$lien = "<span"; 
				}
				if($class != null){$lien .= " class='".$class."'>"; }
				else{$lien .= ">";}
				if($this->page != $i){
					$lien .= ($i+1)."</a>";
				}else{
					$lien .= ($i+1)."</span>"; 
				}
				
				$pagingArray["liens"][$i] = $lien;
				$i++;
			}
		}else{
			$pagingArray["liens"][0] = "";
		}
		return $pagingArray;
	}
	
}
?>



Modérateur
Bonjour. Et merci de poser une question.

As-tu des problèmes en algorithmie? Dans ce cas évoque toi-même la solution en mots, et si tu peines à l'appliquer, poses les questions pratiques.
Salut,

pour résoudre ton problème, il te suffit de mettre une condition (page < 7) dans ta boucle de stockage des numéros.

Le code n'est pas de toi, pas vrai ?
Non, il n'est pas de moi Smiley decu ... je m'exerce en essayant de comprendre...

En bas de ma page j'ai ceci


							<?php
								if(isset($_REQUEST['ville'])){$reqArchive = "&ville=".$_REQUEST['ville'];}
								else if(isset($_REQUEST['type'])){$reqArchive = "&type=".$_REQUEST['type'];}
								else if(isset($_REQUEST['prix'])){$reqArchive = "&prix=".$_REQUEST['prix'];}
								else{$reqArchive = null;}
								
								$paging = $archive->createPaging("pagingLien", $reqArchive);
								echo $paging['precedent'];


							
								foreach($paging['liens'] as $lien){
									
								echo $lien;
							
								}
								echo $paging['suivant'];
							?>




J'ai essayé de multiple choses (if) au niveau du foreach($paging Smiley liens ....

J'ai essayer de faire un si(page>7) faire afficher ... en vain..suis je proche

Pensez vous que c'est ici ou dans le code précédent?

Merci beaucoup
Modifié par alexigor (03 Mar 2012 - 00:57)
Les modifications à faire sont dans la fonction createPaging(...), plus précisément dans cette boucle :

while($i < $this->compteur/$this->compteurParPage){

				if($this->page != $i){

					if($request == null){

						$lien = "<a href='?pg=".$i."'";

					}else{

						$lien = "<a href='?pg=".$i.$request."'";

					}

				}else{

					$lien = "<span"; 

				}

				if($class != null){$lien .= " class='".$class."'>"; }

				else{$lien .= ">";}

				if($this->page != $i){

					$lien .= ($i+1)."</a>";

				}else{

					$lien .= ($i+1)."</span>"; 

				}

				

				$pagingArray["liens"][$i] = $lien;

				$i++;

			}



En modifiant la condition de la boucle, en gros, le truc entre parenthèses du while, tu peux faire ce que tu veux. Mais bon, après, si tu as besoin de faire un affichage plus pratique (ie affichage des liens 3 pages avant la page en cours + 3 pages après la page en cours), tu dois modifier le contenu de la boucle. (ce qu'il y a dans les accolades du while)

Je te conseille donc fortement d'apprendre l'algorithmique. (et accessoirement le php, mais l'algorithmique c'est quand même la base pour comprendre ce que tu fais en programmation.)