IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 PHP Discussion :

Utilisation du pager dans le tuto Jobeet [1.x]


Sujet :

PHP

  1. #1
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut Utilisation du pager dans le tuto Jobeet
    Bonjour à tous,

    Ayant besoin d'un paginateur, j'ai repris le tuto Jobeet, jour 7.

    Malheureusement, après avoir mis la pagination en place je n'obtiens pas le comportement attendu : quel que soit le lien du paginateur sur lequel je clique, j'obtiens toujours les 5 premiers premiers jobs de cette catégorie et jamais les autres.

    J'ai passé deux heures là-dessus à contrôler le code et à mettre des traces, je n'y comprends rien. Ce qui me laisse perplexe est que la requête SQL exécutée est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT j.* FROM jobeet_job j WHERE (j.category_id = ? AND j.expires_at > ?) ORDER BY j.created_at DESC 
    LIMIT 5
    L'offset n'apparait jamais dans la requête.
    Pourtant, si je mets une trace dans sfDoctrinePager.init(), on passe bien sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
             $query
            ->offset($offset)
            ->limit($this->getMaxPerPage())
    (ligne 121 environ).

    Si quelqu'un a une idée, elle sera la bienvenue

  2. #2
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 57
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    Il est mentionné dans le tuto jobeet que si tu utilise Le pager Doctrine tu doit aussi utilisé les méthodes : getNextPage(), getPreviousPage() .... !!!

    Autrement, si tu n'utilise pas ces méthodes il faudra paramétrer ta requête pour retourné une plage de résultat a chaque fois.

    Bonne continuation

  3. #3
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Les méthode : getNextPage() et getPreviousPage() permettent de récupérer le numéro de la prochaine page et de la page précédente pour générer la barre de sélection de page, en aucun cas elle ne permettent de changer de page dans l'utilisation du pager.

    Pour indiquer la page que tu souhaites afficher, il faut utiliser la méthode setPage() de l'objet sfDoctrinePage. Hors je ne vois pas d'utilisation de l'objet sfDoctrinePager dans ton code.

    Essaye quelque chose dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            $query = Doctrine_querry::create()->
                            from('jobeet_job j')->
                            where('j.category_id = ?', $cat)->       // là à toi de mettre la catégorie
                            andWhere('j.expires_at > ?', $date)    // et le deuxième paramètre de ta requête
            $this->pager = new sfDoctrinePager(
                    'jobeet_job',  // le nom de modèle de table
                    20                          // le nombre de lignes par page
            );
            $this->pager->setQuery($query);
            $this->pager->setPage($page);                          // le numéro de la page a afficher
            $this->pager->init();
    Note que l'exécution de la requête est lancée par $init() du pager.

    Plus d'informations sur le tuto jobeet : Chapitre 11 - Intégration avec Doctrine c'est pour la version 1.2, mais cela reste fonctionnel avec la 1.4.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  4. #4
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Oui, mais le code que j'utilise est juste celui du tuto :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public function executeShow(sfWebRequest $request)
    {
      $this->category = $this->getRoute()->getObject();
     
      $this->pager = new sfDoctrinePager(
        'JobeetJob',
        sfConfig::get('app_max_jobs_on_category')
      );
      $this->pager->setQuery($this->category->getActiveJobsQuery());
      $this->pager->setPage($request->getParameter('page', 1));
      $this->pager->init();
    }
    Et si je mets de traces dans init(), je vois bien le limit (régla à 5 chez moi pour les tests) et le offset (le bon numéro de page) qui se renseignent...
    J'ai mis à jour avec la 1.4.5 mais ça ne change rien.

    Snif.

  5. #5
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    J'utilise depuis la 1.2 sans problèmes.

    Tu dois avoir une couille ailleurs.

    Note que le code que tu donnes dans ton deuxième message n'est absolument pas le même que celui du premier message. As-tu la même requête générée en sql entre les deux ?
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  6. #6
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Oui, comme indiqué dans les messages, le code du second est celui qui se trouve dans l'action, le code du premier est un extrait de la méthode init() du pager, là où j'ai mis les traces

  7. #7
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Tu n'as qu'un problème en suivi.

    Je réponds à une dizaines de problèmes en parallèle, et parfois certaines parallèle deviennent perpendiculaire !

    Ma question reposait sur le code SQL généré.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Points : 106
    Points
    106
    Par défaut
    t'as modifié le valeur de "app_max_jobs_on_category" ?!

  9. #9
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Oui, j'ai essayé plusieurs valeurs, vidé le cache, rebooté la machine, dansé à la lune, sacrifié une vierge, bu du ouisky. Tout cela, il faut le dire, en vain...

    Aussi, faute de pouvoir formuler la moindre hypothèse sur ce comportement curieux, ai-je récupéré hier les sources d'un premier jet de jobeet que j'avais fait il y a trois mois sur un autre poste de travail - et sur cette version le pager fonctionnait. Je vais essayer de trouver ce qui cloche à coups de windiff (de WinMerge, plutôt...).

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Points : 106
    Points
    106
    Par défaut
    waw
    voici un bout de code mais c'est avec propel, regardes peut etre sa t'aidera et bon courage

    le code du partial
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <?php if ($paginationIncident->haveToPaginate()): ?>
       <div style="margin-top: 10px;">
            <?php if($paginationIncident->getFirstPage() !=$paginationIncident->getPage()): ?>
            <?php echo link_to('&laquo;', '@Accueil_Incident?pageIncident='.$paginationIncident->getFirstPage(),'class="pageLink"') ?>
            <?php echo link_to('&lt;','@Accueil_Incident?pageIncident='.$paginationIncident->getPreviousPage(),'class="pageLink"') ?>
            <?php endif ?>
     
     
            <?php $links = $paginationIncident->getLinks();
                   foreach ($links as $page): ?>
            		<?php echo ($page == $paginationIncident->getPage()) ?
                   		'<span class="selectedPageBox">'.$page.'</span>' :
                   		link_to($page, '@Accueil_Incident?pageIncident='.$page ,'class="pageLink"')?>
            		<?php endforeach ?>
     
     
            <?php if($paginationIncident->getLastPage() !=$paginationIncident->getPage()): ?>
                     <?php echo link_to('&gt;', '@Accueil_Incident?pageIncident='.$paginationIncident->getNextPage(),'class="pageLink"') ?>
                     <?php echo link_to('&raquo;','@Accueil_Incident?pageIncident='.$paginationIncident->getLastPage(),'class="pageLink"') ?>
            <?php endif ?>
    </div>
    <?php endif ?>
    indexSuccess
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $this->IncidentObj=IncidentPeer::getAllIncident($request->getParameter('pageIncident'),
      													sfConfig::get('app_total_items_accueil_incident'));
    et puis le code concernant le model
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public static function getAllIncident($currentPage,$totalItems)
    	{
    		$c = new Criteria();
     
    		$c->addJoin(CasPeer::IDCAS,IncidentPeer::CAS_ID);
    		$c->addDescendingOrderByColumn(CasPeer::DHOUVERTURE);
     
     
    		$pagerObj= new sfPropelPager('Incident',$totalItems);
    		$pagerObj->setCriteria($c);
    		$pagerObj->setPage($currentPage);
    		$pagerObj->init();
     
    		return $pagerObj;
    	}
    et puis le fichier app.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     total_items_accueil_incident: 10

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Herode Voir le message
    Oui, j'ai essayé plusieurs valeurs, vidé le cache, rebooté la machine, dansé à la lune, sacrifié une vierge, bu du ouisky. Tout cela, il faut le dire, en vain...

    Aussi, faute de pouvoir formuler la moindre hypothèse sur ce comportement curieux, ai-je récupéré hier les sources d'un premier jet de jobeet que j'avais fait il y a trois mois sur un autre poste de travail - et sur cette version le pager fonctionnait. Je vais essayer de trouver ce qui cloche à coups de windiff (de WinMerge, plutôt...).
    Bonjour,

    As-tu trouvé d'où venait ce comportement ? Je pense rencontrer le même problème que toi et je serais intéressé si tu as des infos à ce propos.

    Merci

  12. #12
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Oui, j'avais résolu ça à coups de windiff.

    Je n'ai pas les fichiers sous la main mais de mémoire, c'était un éléphant du style : pager non initialisé. Quelque chose dans le template comme une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include_partial('job/list', array('jobs' => $pager->getResults())); ?>
    que j'avais oublié de placer.

  13. #13
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 14
    Points : 15
    Points
    15
    Par défaut Merci
    Finalement, j'ai été pressé, et j'ai repris un backup des fichiers tels qu'ils étaient au début du jour 7 et j'ai repris le tuto sur la page catégorie en entier.

    Merci de ton aide, en tout cas. Il est possible que mon erreur ait été la même que la tienne, mais je n'en saurai jamais rien.

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  2. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo