Bonjour à tous.

Dans ma SeancesController.php, j'ai mis ceci :

$this->loadModel('SeanceUsers');
        $this->paginate = [
            'maxLimit' => 1
        ];

        $views = $this->SeanceUsers
            ->find()
            ->contain([
                'Users' => function ($q) {
                    return $q->find('seanceIndex');
                }
            ])
            ->where([
                'SeanceUsers.user_id' => $this->request->user_id
            ])
            ->order([
                'SeanceUsers.created' => 'DESC'
            ]);

        //Check if the seance is found.
        if (empty($views)) {
            $this->Flash->error(__('Cette séance n\'existe pas ou a été supprimée.'));

            return $this->redirect(['action' => 'index']);
        }

        $views = $this->paginate($views);

        $this->set(compact('views'));

Je récupére qu'une séance par page et de la plus récente à la plus ancienne. J'aimerai donc paginer mes pages de sorte que si j'ai 18 séances, cela me fera 18 pages comme ceci : 18 17 16 ... 1.

Seulement, ça me fait l'inverse, la pagination me donne 1 2 3 ... 18 tout en me présentant la séance la plus récente (page 1 donc) jusqu'à la plus ancienne (page 18).

Dans ma vue, j'ai ceci pour paginer (rendu pour bootstrap) :

<?php
            if($this->Paginator->numbers() != false) {
                echo $this->Paginator->prev(__('Précédent'), array('tag' => 'li'), null, array('tag' => 'li','class' => 'disabled','disabledTag' => 'a'));
                echo $this->Paginator->numbers(array('separator' => '','currentTag' => 'a', 'currentClass' => 'active','tag' => 'li','first' => 1));
                echo $this->Paginator->next(__('Suivant'), array('tag' => 'li','currentClass' => 'disabled'), null, array('tag' => 'li','class' => 'disabled','disabledTag' => 'a'));
            }
        ?>

J'ai beau cherché dans la doc avec le PaginatorHelper, je ne comprends pas. Pour info, c'est cakephp 3 RC2.

Merci d'avance.

6 réponses


Bonsoir.
Ce n'est pas logique ce que tu demandes.
Une pagination commence toujours par la page 1 et se termine par la dernière page.
Il est donc logique que le helper Paginator génère une pagination croissante, il n'est ni prévu, ni configurable pour l'inverse.
Tu n'as jamais lu de livre ? :p

JeremyB
Auteur

Lorsque j'écris un livre, ma dernière phrase se trouve bien sur la dernière page. :p J'aurai bien voulu que ma 18ème séance corresponde à ma 18ème page.

Donc pas de solution à ma demande ? Grrrr

Tu n'as pas compris.
Quand tu lis un livre, le numérotage des pages (pagination) est croissant, par conséquent, débute par la page 1.

JeremyB
Auteur

D'accord, je comprends. Mais tu es bien d'accord avec moi qu'il y a un soucis dans ma pagination alors. Car logiquement, ma première séance devrait être la page 1 et la dernière séance (la plus récente donc), la page 18. Sauf que c'est la page 1. Comment lui dire de mettre une pagination 1 2 3... 18 où 18 correspond à la dernière séance du membre ? Je comprends qu'on ne puisse pas faire 18 ... 3 2 1.

            ->order([
                'SeanceUsers.created' => 'DESC'
            ]);

En changeant l'ordre de ta requête tu vas te retrouver avec tes séances dans l'ordre opposé, ça ne résoud pas ton problème ? Suffit de changer le DESC en ASC.

JeremyB
Auteur

Oui, j'ai bien ça dans mon code :

$this->loadModel('SeanceUsers');
        $this->paginate = [
            'maxLimit' => Configure::read('Seance.seance_view_per_page')
        ];

        $views = $this->SeanceUsers
            ->find()
            ->contain([
                'Users' => function ($q) {
                    return $q->find('seanceIndex');
                }
            ])
            ->where([
                'SeanceUsers.user_id' => $this->request->user_id
            ])
            ->order([
                'SeanceUsers.created' => 'DESC'
            ]);

        //Check if the seance is found.
        if (empty($views)) {
            $this->Flash->error(__('Cette séance n\'existe pas ou a été supprimée.'));

            return $this->redirect(['action' => 'index']);
        }

        $views = $this->paginate($views);

        $this->set(compact('views'));

Dernière séance qui s'affiche, pas de soucis. Mais pagination qui comme par 1, puis 2 3 ... 18, au lieu de 1 2 3 ... 18 (18 étant la page affichée)