Bonjour à tous,
Je suis face à un léger problème depuis 2 bonnes heures.
J'ai un forum constitué de forums -> catégories -> topics -> réponses.
Actuellement j'en suis au stade des vues topics qui affichent le message d'origine et les réponses associées.
J'ai limité le nombre de réponse à 20 par pages via paginate et le code suivant :
function show($slug, $id) {
$topic = $this->Topic->find('first', array(
'conditions' => array('Topic.slug' => $slug, 'Topic.id' => $id),
'contain' => array('User', 'User.Profil')
));
$this->Paginator->settings = $this->paginate;
$replies = $this->paginate($this->Topic->Reply, array('topic_id' => $id));
$this->set('topic', $topic);
$this->set('replies', $replies);
}
Et dans ma vue, j'appelle la pagination via le code suivant :
echo $this->Paginator->numbers(array('controller' => 'topics', 'action' => 'show'));
Au niveau de mes routes, j'ai la configuration suivante :
/* Topics */
Router::connect('/forums/sujet/:id-:slug', array('controller' => 'topics', 'action' => 'show'), array('pass' => array('slug', 'id'), 'slug' => '[a-z0-9\-]+', 'id' => '[0-9]+'));
Router::connect('/forums/sujet/:id-:slug/page/:page', array('controller' => 'topics', 'action' => 'show'), array('pass' => array('slug', 'id'), 'named' => array('page'), 'slug' => '[a-z0-9\-]+', 'id' => '[0-9]+', 'page' => '[0-9]+'));
Le souci qui se pose, c'est que tout fonctionne bien tant que je suis sur la première page du topic, avec une url du type http://domaine.com/forums/sujet/10-topic-de-test/, mais dès que je tente d'accéder à la pagination, c'est le bazar.
Normalement, mes URLs paginées devraient être sous la forme http://domaine.com/forums/sujet/10-topic-de-test/page/2, mais ça ne fonctionne pas.
De plus, le paginator dans ma vue m'affiche des liens du type http://domaine.com/topics/show/topic-de-test/10/page/2
A noter que j'ai un '/' entre page et 2 puisque dans mon fichiers Routes j'ai la ligne suivante :
Router::connectNamed(array('pages'), array('greedy' => false, 'separator' => '/'));
Je n'arrive pas à comprendre d'où vient le problème puisque j'ai bien défini tous mes paramètres, et partout, et que ça fonctionne très bien sur la première page.
J'ai cherché un peu partout sans solution. Donc je m'adresse à vous ;)
Auto résolution du souci ! J'ai continué à chercher, et en fait il semble que mes URLs étaient accessibles, bien que non prises en compte par le helper Paginator.
Du coup, j'ai donné au Helper des infos strictes :
$this->Paginator->options(array('url' => array(
'controller' => 'topics',
'action' => 'show',
'slug' => $this->params'slug'],
'id' => $this->params'id']
)));
echo $this->Paginator->numbers();
Et désormais j'ai les bons liens.
J'ai un gros souci de surcharge des réponses dans ma deuxième page de pagination, mais sinon ça fonctionne !