{Symfony}Système de pagination
Suite au dernier post que j'ai fais j'ai voulu rajouté un système de pagination.
Voici donc mon nouveau controleur
public function executeShow(sfWebRequest $request)
{
$this->category = Doctrine::getTable('BlogCategory')->findOneBySlug($request->getParameter('slug'));
$this->forward404Unless($this->category);
$this->pager = new sfDoctrinePager(
'BlogArticle',
sfConfig::get('app_article_per_page')
);
$this->pager->setQuery($this->category->getArticle());
$this->pager->setPage($request->getParameter('page', 1));
$this->pager->init();
}
Il me génère une error fatal
Fatal error: Call to undefined method Doctrine_Collection::offset() in C:\development\sfprojects\blog\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\pager\sfDoctrinePager.class.php on line 78
Pourtant j'ai fais un copié/collé du tutorial^^.
Merci de ton aide :p
Réponses apportées à cette discussion
Ok j'ai trouvé.
Le execute se faisait automatiquement sur la requête, il fallait donc l'enlever.
Par contre je trouve un défaut, si j'ai que deux pages.
Mais si je tape ?page=3 sa ne m'affiche rien. Le top serait que cela redirigerait vers la page 1.
Merci
Ce n'est pas à l'objet de pager de gérer une éventuelle redirection. Ce n'est pas son rôle mais celui du contrôleur. Donc à toi de vérifier que ce que tu peux reçois comme valeur de $page est strictement supérieur à $pager->getLastPage(). Si c'est le cas, tu rediriges vers la page 1 ou bien la dernière page.
Ok et dans le template jai le droi de faire un if ki test et affiche ou non le lien ver la premier page sinon la pagination fo la metr ds un partial?pour pou voir la reutilisé
Peux-tu éviter le langage SMS stp...
Ok et dans le template jai le droit de faire un 'if' qui test et affiche ou non le lien ver la première page?
Par exemple si on est déjà à la première page je n'affiche pas le bouton 'Première page'.
Sinon la pagination faut la mettre dans un partial?pour pouvoir la reutiliser?
Merci, désolé mais j'étais sur mon téléphone portable c'est pour sa que j'ai écris en sms.
Oui tu fais comme pour le pager de Jobeet pour la pagination. Tu le mets dans un partial du répertoire /apps/frontend/templates afin que tu puisses l'appeler dans n'importe quel module avec :
<?php include_partial('global/pager', array('pager' => $pager)); ?>
++