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


kwik
Réponse acceptée

Bonjour

Peut être que ce lien peut t'aider ? Pagination avancée

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
Auteur

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

");

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 :)

neecride
Auteur

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.

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

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
Auteur

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

OK.
J'ai dév cette pagination : [https://github.com/stephweb/ILD-Pagination]
si ça peut te rendre service essaye la.
Elle est simple, meme sans MVC.

neecride
Auteur

stephweb merci je vais y jetée un oeil.