Decouper le resultat d'une requete sur plusieurs pages

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 631 fois - Téléchargée 27 fois

Contenu du snippet

Bon c'est du déjà vu, mais celui ci permet aux handicapés de se balader de pages en pages, grâce notamment aux tabindex et au fait que tous les numéros de pages soient affichés, aussi c'est adaptable à toutes les résolutions d'écran.
Aussi grâce à CSS c'est très "customisable".
Bon je pense qu'on peut encore l'améliorer notamment à ce niveau "$page = "trombinoscope.php?";" mais je ferais ça dans une prochaine Maj si j'ai le temps.
Laisser moi vos commentaires ;)

Source / Exemple :


##########################
La fonction :
##########################

<?php
//Fonction découp_page
//Par Mathis_mathis(at)hotmail.com
//Merci à crapo

function decoupe_page($page, $rqt, $nb_enreg, $lim)
{

  if($lim==""){$lim=0;}
  
  $tab[0]= mysql_query("$rqt LIMIT $lim, $nb_enreg");
  $tab[1] = mysql_query($rqt)or die("ERREUR REQUETE DECOUPE PAGE :".mysql_error()); //requete
  $tab[2]= mysql_numrows($tab[1]); //nombre de ligne en tout

  if ($tab[2] > $nb_enreg) //si le nombre de ligne en tout est superieur au nombre de ligne a afficher
  {
    $i=1; 
	$j=0;

    $max= $tab[2]/$nb_enreg; //on divise le nombre de total de ligne par le nombre de ligne a afficher
    $max=ceil($max); //le resultat est un nombre arrondi

    $tab[3] = "<ul>\n<li>Page : </li>\n";
	
	$tabindex=500;
	
	if ($lim!=0)
    { 
	$tab[3] .= "<li><a href='".$page."lim=".($lim-$nb_enreg)."' title='Aller a la page precedente' tabindex='$tabindex'> <<</a></li>\n";
	}
	

    while ($i <= $max)
    { 
	  $tabindex++;
      if($lim==$j){$tab[3] .= "<li class=\"decoup_page_actif\">$i</li>\n";} 
      else {$tab[3] .= "<li><a href=\"".$page."lim=$j\" title=\"Aller a la page $i\" tabindex=\"$tabindex\">$i</a></li>\n";}
      $j+=$nb_enreg;
      $i++;
	  
    }
	
	if ($lim<($tab[2]-$nb_enreg))
    {
	$tab[3] .= "<li><a href='".$page."lim=".($lim+$nb_enreg)."' title='Aller a la page suivante'  tabindex='".($tabindex+1)."'>>></a></li>";
 	}
	
    $tab[3] .= "</ul>\n"; 
  }
  return $tab;
}
?>

##########################
Appel de la fonction :
##########################
<?php
//Appel de la fonction de découpe automatique de la page
$nb_enreg = 50; //Nombre d'enregistrer visible par page
$page = "trombinoscope.php?"; //Nom de la page
$rqt ="SELECT photos FROM membres"; //Requete à executer
$lim = $_GET["lim"];
$pg = decoupe_page($page, $rqt, $nb_enreg, $lim);
echo"<div id=\"decoup_page\">$pg[3]</div>"; //Afichage du découpage
?>

##########################
Exemple présentation en CSS
##########################

/* ## PRESENTATION DECOUPE PAGE ## */
#decoup_page {
clear: both;
font-weight: bold;
margin:0px;
font-size:0.95em;
padding-bottom:10px;
}
#decoup_page li{
float:left; 
margin-right:3px;
list-style-type:none;
}
#decoup_page a{
color:#0000CC;
}
#decoup_page a:visited{
text-decoration:none;
}
.decoup_page_actif{
background-color:#FF6600;
}

A voir également

Ajouter un commentaire

Commentaires

cs_jeremou
Messages postés
1
Date d'inscription
samedi 9 septembre 2006
Statut
Membre
Dernière intervention
13 septembre 2006
-
Salut,

Je sais que cette source date, et je ne l'ai pas lu en entier mais pour compter toutes les lignes d'un résultat avec l'option LIMIT, il y a plus simple que ce que vous faites en utilisant la syntaxe suivante :
SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE condit LIMIT 0,30;
SELECT FOUND_ROWS();

a+
cs_charlyx
Messages postés
2
Date d'inscription
mercredi 3 août 2005
Statut
Membre
Dernière intervention
23 avril 2007
-
salut
decoup_page tout est nomme "decoup_page" on comprend plus rien
il manque plus que des variables $decoup_page :
il manque le reste if (!$dbh1 = mysql_connect("localhost",'root','')){
echo "
connexion impossible " ;
}
if (!$dbh = mysql_select_db($basedb,$dbh1)){
echo "
connexion impossible " ;
mysql_close();
cs_MATHIS49
Messages postés
370
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
14 mai 2010
-
Bon je vais étudier ca et voir ton systeme Anthomicro ;) et Cookiech merci pour ta remarque qui est pertinente.
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
Salut,

c'est clair qu'il vaut mieux récupérer seulement les enregistrements nécessaires, et éviter les requêtes à base de LIMIT mais plutôt se baser sur l'id unique autoincrémenté pour afficher les pages avec un between par exemple, ça sera largement plus rapide...
coockiesch
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3 -
Salut!
C'est pas mal, mais ca me semble un peu bourrin de tout récupérer juste pour compter les enregistrements, non?

Autrement, utiliser ' ', c'est plus rapide que " " ...

Juste pour comparer, voici ce que j'avais fais:
http://www.phpcs.com/code.aspx?ID=24067

@++

R@f

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.