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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

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