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

Symfony PHP Discussion :

appliquer les filters en Frontend


Sujet :

Symfony PHP

  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut appliquer les filters en Frontend
    Bonjour à tous,
    ça fait un moment que je galère avec un prb, je souhaite appliquer un Filtre (utilisé d'habitude en Backend) sur un module Frontend, j'ai trouvé qq discussions dans ce forum, mais j'arrive pas pour l'instant à trouver la bonne solution et le bon code qui marche

    j'ai essayé d'adapter notamment le code publié sur:
    http://www.developpez.net/forums/d99...ltre-frontend/

    mais ça marche pas

    vous avez des idées, des pistes soit sur ce code et sur un autre qui marcherait mieux

    merci!!!

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Comment sont généré les query entre le back et le front ?

    Que veux-tu exactement copier ?

    Comment imagines-tu pouvoir passer le filtre de l'un à l'autre au niveau de l'interface au moins (à moins que tu aies déjà la solution au niveau code).

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    Voici ce que j'ai essayé d'adapter comme code dans mon module Frontend (Article):

    le code du controller:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     public function executeIndex(sfWebRequest $request)
      {
     
        $this->filters = new ArticleFormFilter($this->getFilters());
        $this->articles = $this->buildQuery(Doctrine::getTable('article')
            ->getSortedArticles());
     
    		}
     
     
    public function executeFilter(sfWebRequest $request)
      {
        // RESET
        if ($request->hasParameter('_reset'))
        {
          $this->setFilters(array()); //reset, filtre vide
          $this->forward('article','index');
        }
     
        $this->filters = new ArticleFormFilter($this->getFilters());
     
        $this->filters->bind($request->getParameter($this->filters->getName()));
        if ($this->filters->isValid())
        {
          $this->setFilters($this->filters->getValues());
          $this->forward('article','index');
        }
     
        $this->setTemplate('index');
      }		
     
     
    protected function getFilters()
      {
        return $this->getUser()->getAttribute('article.filters', array());
     
      }
     
      protected function setFilters(array $filters)
      {
     
        return $this->getUser()->setAttribute('article.filters', $filters, 'front_module');
     
      }
     
     
      protected function buildQuery($q)
      {
        if(!isset($this->filters))
          $this->filters = $this->getFilters();
     
        $this->filters->setQuery($q);
     
        $query = $this->filters->buildQuery($this->getFilters());
        return $query->execute();
      }
    le 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
     
     <?php use_stylesheets_for_form($filters) ?>
    <?php use_javascripts_for_form($filters) ?>
     
      <?php if ($filters->hasGlobalErrors()): ?>
        <?php echo $filters->renderGlobalErrors() ?>
      <?php endif; ?>
     
    <form class="lien_ajax" action="<?php echo url_for('article/filter') ?>" method="post">
      <?php echo $filters ?>
     
      <?php echo $filters->renderHiddenFields() ?>
      <input type="submit" value="Filter" /> &nbsp; <a class="lien_ajax" href="<?php echo url_for('article/filter?_reset=1') ?>">Reset</a>
    </form>
    le template:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
    <?php  include_partial('filters', array('filters' => $filters)) ?>
     
     
    <h2>résultats filtrés</h2>
     
    <table>
      <thead>
         <tr>
        <th>Id</th>
           <th>Nom</th>
           <th>Référence </th>
           <th>Fournisseur</th>
         ....
                  </tr>
      </thead>
      <tbody>
     
     
     <?php foreach ($articles as $article): ?>
     
        <tr>
          <td><a href="<?php echo url_for('article/show?id='.$article->getId()) ?>"><?php echo $article->getId() ?></a></td>
           <td >  <?php echo $article->getNom()?> 
          </td>
            <td >
           <?php echo $article->getReference()?>
          </td>
            <td >
           <?php echo $article->getFournisseur()?>
          </td>
         .....
     
      </tbody>
    </table>
    le problème avec ce code, c'est que j'ai aucun résultat qui s'affiche quand j'applique le filtre

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Tu es sur qu'il y a quelque chose dans ton objet user pour "article.filters" ?

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    je viens de faire un var_dump de :
    $this->getUser()->getAttribute('article.filters', array()));
    ça m'affiche: array: empty

    En regardant du côté de mon module "Article" en backend, dans le cache, j'ai trouvé dans le controller le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      protected function getFilters()
      {
        return $this->getUser()->getAttribute('article.filters', $this->configuration->getFilterDefaults(), 'admin_module');
      }
     
      protected function setFilters(array $filters)
      {
        return $this->getUser()->setAttribute('article.filters', $filters, 'admin_module');
      }
    comment je pourrais traduire ça du côté du frontend?
    parce que en essayant de remettre ce même code, j'ai une erreur:

    Fatal error: Call to a member function getFilterDefaults() on a non-object..

  6. #6
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    Bon, j'ai pu résoudre le problème d'application des filtres en Frontend en regardant ce lien:
    http://www.developpez.net/forums/d98...-on-aime-ca-y/

    il y avait un petit souci notamment dans le "buildQuery($q)"

    il me reste maintenant à faire fonctionner la pagination...

    des idées?

  7. #7
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    En fait, je ne suis pas sur (je serais plutôt sur du contraire) que tu aies le même objet $user (même pour la même personne) entre les deux.

    Ouvre ton back, sélectionne des données. Regardes, après la sélection, dans le debug, le contenu de l'objet user, tu y verras les données de ton filtre. Passes en front, regardes au même endroit, dans la partie debug, si tu y retrouves les données.

  8. #8
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    SOS, j'arrive plus à faire quoi que ce soit sur mon projet symfony, j'ai ça comme erreur:
    Warning: unserialize() [function.unserialize]: Function spl_autoload_call() hasn't defined the class it was called for in ....\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Connection.php on line 1578

    Fatal error: Allowed memory size of 134217728 bytes exhausted..
    c quoi ce truc, j'arrive pas à comprendre ce qui se passe.
    je sais pas si ça vient du navigateur..mais juste pour info, en testant sur IE, j'ai bien accès à tout

  9. #9
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Bizarre, je ne vois pas en quoi du code standard pourrait faire qu'il fonctionne, ou pas, suivant l'explorateur. Sauf si, dans ton code, tu effectues un traitement en fonction de l'opérateur.

    De plus le message laisserait penser à une boucle sans fin qui saturerait la mémoire. Ou une fuite de mémoire dans un traitement d'objet, là aussi possiblement dans une boucle. Mais je ne vois aucune raison que cela soit influencé par l'explorateur.

    Quels sont les dernières modifications effectuées ? Que donne l'application des tests unitaires ?

  10. #10
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Par défaut
    Bonjour,

    Désolé de me meler à la conversation, mais à tu pensé à vider le cache de ton navigateur, ainsi que le cache de symfony (php symfony cc), peut être que la solution est la, sauf si tu as mal développé (créé une boucle infinie au niveau de ton accès à ta base de données via Doctrine, comme le dit Michel...)

    Cordialement,

    Mathieu

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 55
    Par défaut Mélanger des modules
    Bonjour,

    Moi aussi je mêle un peu et en retard à une conversation qui ne me regarde peut être pas.

    Mais c'est quoi l’intérêt ou le pb de choisir de générer un module admin ou front

    En clair mis à part que les modules sont construits différemment, est ce qu'on peut mélanger selon l'humeur des modules admin crées comme ça
    - generate-admin backend JobeetJob --module=job

    et des modules CRUD Front crées comme ça
    - generate-module frontend article Article

    dans la même apps
    Ils sont générés complètement différenmment
    mais on peu intervenir comme on veut après coup comme on veut sur les deux,
    Ou alors?

    Pi

Discussions similaires

  1. [1.x] afficher les résultats par défaut d'un Filter en Frontend
    Par flora806 dans le forum Symfony
    Réponses: 4
    Dernier message: 24/05/2012, 17h29
  2. difficulté à appliquer les classes avec un code css
    Par pharaonline dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 24/02/2006, 15h52
  3. Appliquer les patch de sécurité
    Par Débéa dans le forum Oracle
    Réponses: 2
    Dernier message: 25/10/2005, 17h48
  4. appliquer les styles d'un document à un autre
    Par Mr N. dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 28/09/2005, 14h32
  5. Appliquer les styles
    Par Jorus dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/09/2005, 14h15

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