Finaliser ma pagination

Par neecride, il y a 9 ans


Bonjour,

Voilà je voudrai une aide pour terminer ma pagination

Ce que je fais

Voila le code :

//pagination $worksPerPage = 3; $worksTotalesReq = $db->query('SELECT id FROM works'); $worksTotales = $worksTotalesReq->rowCount(); $pagesTotales = ceil($worksTotales/$worksPerPage); //si id en get if(isset($_GET['id']) AND !empty($_GET['id']) AND $_GET['id'] > 0 AND $_GET['id'] <= $pagesTotales) { $currentPage = intval($_GET['id']); } else { //si id null alors page sera egal 1 $currentPage = 1; //redirect('home&id=1'); } $startPaginat = ($currentPage-1)*$worksPerPage; //pagination number link function paginatNumbers(){ global $pagesTotales, $currentPage; $prev = $currentPage - 1; //previous page is page - 1 $next = $currentPage + 1; //next page is page + 1 echo '<ul style="margin:0;" class="pull-right pagination pagination-sm">'; //prev if($currentPage == 1){ echo '<li class="disabled" /><a>&laquo;</a></li>'; }else{ echo '<li><a href="'. WEBROOT .'index.php?page=home&amp;id=' . $prev . '">&laquo;</a></li>'; } //pagination current for($i=1; $i <= $pagesTotales; $i++) { if($i == $currentPage) { echo '<li class="active"><a>'. $i .'</a></li>'; } else { echo '<li><a href="'. WEBROOT .'index.php?page=home&amp;id='.$i.'">' . $i . '</a></li>'; } } //next last page if(isset($currentPage) && $currentPage == $pagesTotales){ echo '<li class="disabled" /><a>&raquo;</a></li>'; }else{ echo '<li><a href="'. WEBROOT .'index.php?page=home&amp;id=' . $next . '">&raquo;</a></li>'; } echo '</ul>'; }

Fin du code

Ce que je veux

En faite je n'arrive pas un splitter avec des point par exemple quand j'ai beaucoup d'articles ou de topic

En vous remerciant !! :)

10 réponses

SLK, il y a 9 ans

Salut,

J'aimerai poser 2 questions avant :

1)
Je ne suis pas sur d'avoir compris :
Si tu as par exemple 20 pages, pour l'instant ça s'affiche de cette façon :
<< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >>
Et toi tu voudrais plutôt avoir quelque chose comme :
<< 1 ... 6 7 8 ... 20 >>
Est-ce que c'est ça ?

2)
Je n'ai pas bien compris cette ligne :

$startPaginat = ($currentPage-1)*$worksPerPage;

Si par exemple, $current_page est à 4, on va avoir :

$startPaginat = (4 - 1) * 3 ; // 9

Alors si la page courante est 4, on commence la pagination à 9 ?
Est-ce que tu t'es trompé, ou c'est moi qui n'ai pas bien compris le code ?

neecride, il y a 9 ans

AlexJM oui je l'avais bien vue ce topic mai il n'a pas étais résolue et c'est du code que je comprend pas.

neecride, il y a 9 ans

Bonjour SLK pour la première question oui je veut bien faire ça << 123 ... 789 >> avec mon design ça donnerai une case vide a la place des petit point.

Pour la deuxième question j'ai adapter ça

https://www.grafikart.fr/tutoriels/php/pagination-php-51

j'ai ajouter des truc mais je ne suis pas trop douée en math.

Cela dit :

$startPaginat = ($currentPage-1)*$worksPerPage;

Est liée a ma requète et ainsi si je veut plus de page je ne modifie que ma première variable qui sera dynamique.

//liste works $req = $db->query(" SELECT works.id, works.name, works.writer, works.content, works.posted, works.date, works.slug, images.name AS image_name, categories.cat_name, users.username, comments.post_id, COUNT(comments.post_id) AS nbcoms FROM works LEFT JOIN users ON users.username = works.writer LEFT JOIN categories ON works.category_id=categories.id LEFT JOIN comments ON comments.post_id = works.id LEFT JOIN images ON images.id = works.image_id WHERE works.posted=1 GROUP BY works.id ORDER BY works.id DESC LIMIT $startPaginat,$worksPerPage ");
AlexJM, il y a 9 ans

Il y a un autre topic avec exactement le même sujet (il me semble) : https://www.grafikart.fr/forum/topics/22988
Si c'est ça, pense à faire une recherche avant de poser la question directement :)

shadowkamikaze, il y a 9 ans

Le sujet à été créer par moi j'ai actualisé mon script en résolu et il marche très bien

stephweb, il y a 9 ans

Bonjour,
pourquoi ne pas utiliser une libraire ?
Il y a des librairies qui te permettent de générer des paginations personalisables en seulement quelques lignes de code (2 lignes de code dans un Controller, et 1 ligne de code dans une Vue par exemple).

neecride, il y a 9 ans

stephweb Oui enfin je connai encore très mal PHP et je ne fait pas de MVC je ne comprend pas sa logique.

neecride, il y a 9 ans

stephweb merci je vais y jetée un oeil.