CLASS DE PAGINATION

Signaler
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Messages postés
1
Date d'inscription
vendredi 21 juillet 2006
Statut
Membre
Dernière intervention
31 décembre 2011
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40881-class-de-pagination

Messages postés
1
Date d'inscription
vendredi 21 juillet 2006
Statut
Membre
Dernière intervention
31 décembre 2011

bonjour,

Je viens de tomber sur cette classe, et je me demandai comment l'utiliser
Est'il possible d'avoir un exemple d'utilisation de cette classe avec l'url rewriting ?
Je suppose qu'il faut utiliser le .htaccess ?

Merci beaucoup
Messages postés
70
Date d'inscription
jeudi 14 avril 2005
Statut
Membre
Dernière intervention
20 août 2008

@hindioumax :
Si tu est en php4 c'est foutu pour toi ^^, enfin pas sans modif en tous cas.

@NainPuissant

J'ai voulu essayer le space_besore et space_after mais ça ne marche pas, car il faut mettre
for ($j = 0; $j <= $this->space_before; $j++)
{
$display .= ' ';
}

$display .= $this->separator;
for ($j = 0; $j <= $this->space_after; $j++)
{
$display .= ' ';
}

car pas défaut il ne prend qu'un espace si on ne lui indique pas le non breakable space, (enfin le navigateur).

voila.

mis à part ça j'ai du aussi modifier de façon à pourvoir utiliser mes variable déjà en $_GET car,
soit :

Ça na pas été gérer

Soit :

J'ai pas vu et/ou compris comment faire.

:)
Messages postés
3
Date d'inscription
dimanche 20 mai 2007
Statut
Membre
Dernière intervention
23 novembre 2007

Bon j'ai un petit problème en serveur distant (OVH), la classe ne semble pas fonctionner.
Pourtant en local tout fonctionne à merveille.

Erreur PHP:
"Can't access to private property::$separator..."

Apparement la classe n'arrive pas récuperer les variables d'option.

Une aide ? Je me demande si c'est pas une histoire de version de php ...

:(
Messages postés
3
Date d'inscription
dimanche 20 mai 2007
Statut
Membre
Dernière intervention
23 novembre 2007

Excellente source, c'est exactement ce que je recherchais. En url rewriting = false, j'ai du toutefois apporter quelques modif sur la classe. En url rewriting = false, j'avais les même problème d'url (avec seulement le &p= après mon host)

J'ai ajouté aussi un paramètre d'option pour définir une classe css.
Maintenant ca fonctionne impeccable.

Merci encore :)


Pour ceux que ca interresse voici les modifs que j'ai fait (sans url rewriting activé):

dans la classe 'pagination', en haut dans les déclarations :
 * @var définition de la classe css des liens
 * @access private
 */	private $classe_css = '';
/**	
 * @var options disponibles
 * @access private
 */	private $options = array(
'nb_datas',
'data_per_page',
'nb_link_per_page',
'url',
'url_rewriting',
'var_page',
'space_before',
'space_after',
'separator',
'classe_css'
);


Les fonctions modifiées qui prenne en compte la variable 'classe_css' + correction URL pour la navigation des pages:
/**
 * Génère les liens
 */	private function generateLink()
{
if ($this->url_rewriting)
{
$this->link = $this->url;
$this->next_page = sprintf($this->url, $this->current_page + 1);
$this->previous_page = sprintf($this->url, $this->current_page - 1);
$this->first_page = sprintf($this->url, 1);
$this->last_page = sprintf($this->url, $this->nb_pages);
}
else
{
$this->link = strstr($this->url, '?') ? '&' : '?';
$this->link .= $this->var_page . '=';
      $this->next_page     = $this->url . $this->link . ($this->current_page + 1);
      $this->previous_page = $this->url . $this->link . ($this->current_page - 1);
$this->first_page    = $this->url . $this->link . 1;
      $this->last_page     = $this->url . $this->link . $this->nb_pages;
}
}
/**
 * Retourne le lien de la première page si la page courante est supérieur à 3 et celui de la page précédente
 *
 * @return string
 */	public function getFirstLinks()
{
$display = '';
if ($this->current_page != 1)
{
if ($this->current_page >= 3)
{
$display .= ' [' . $this->first_page . ' <<] ';
}
$display .= ' [' . $this->previous_page . ' <] ';
return $display;
}
}
/**
 * Retourne le lien de la page suivante et celui de la dernière page si la page courante n'est pas égale au nombre de pages
 *
 * @return string
 */	public function getLastLinks()
{
$display = '';
if ($this->current_page != $this->nb_pages)
{
$display .= ' [' . $this->next_page . ' >] ';
if ($this->current_page <= $this->nb_pages - 2)
{
$display .= ' [' . $this->last_page . ' >>] ';
}
return $display;
}
}
/**
 * Retourne la liste des liens avec le séparateur si il n'est pas vide : 0 | 1 | 2 | 3 | 4
 *
 * @return string
 */	public function getLinks()
{
$display = '';
for ($i = 1; $i <= $this->nb_pages; $i++)
{
if ($i - 1 < ($this->current_page + $this->nb_link_per_page) && $i + 1 > ($this->current_page - $this->nb_link_per_page))
{
if ($i == $this->current_page)
{
$display .= '' . $i . '';
}
else
{
if ($this->url_rewriting)
{
$url = sprintf($this->link, $i);
}
else
{
$url = $this->url . $this->link . $i;
}
$display .= '['. $url . ' ' . $i . ']';
}
if ($i != $this->current_page + $this->nb_link_per_page && $i != $this->nb_pages)
{
for ($j = 0; $j <= $this->space_before; $j++)
{
$display .= ' ';
}
$display .= $this->separator;
for ($j = 0; $j <= $this->space_after; $j++)
{
$display .= ' ';
}
}
}
}
return $display;
}


Construction de l'objet :
$options = array(
'nb_datas' => $count, // Avec une base de donnée
// 'nb_datas' => count($datas), // Avec un array
'data_per_page' => 1,
'nb_link_per_page' => 10,
'url' => 'index.php?p='.$id_page, // Sans url rewriting
// 'url' => 'index-%d.html', // Avec url rewriting
// 'url_rewriting' => true, // Avec url rewriting
'var_page' => 'display',
'classe_css' => 'pagination'
);

$pagination = new Pagination($options);
$pagination->separator = '-';

// etc ...


:)
Messages postés
138
Date d'inscription
vendredi 1 août 2003
Statut
Membre
Dernière intervention
16 juillet 2009

Bonne remarque de seulunami, la source comme elle est proposée là ne fonctionne pas en mode url rewriting = false.

La modification qu'il propose fonctionne.

Merci pour ton travail NainPuissant, c'est du bon boulot.

A+
Afficher les 32 commentaires