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 :

Question concernant les filtre en frontend [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Par défaut Question concernant les filtre en frontend
    Bonjour,

    J'ai bien vu d'après un autre topic que les filtres en frontend ne sont pas géré.

    Toutefois, il m'en faut car un site dans recherche, c'est plus un site.

    Pour palier ce manque, que doit-je faire ?

    Je suis en train de me dire qu'on pourrait ajouter un formulaire et simplement faire getRequestParameter et récupérer tous les éléments en paramètre s'il sont présent.

    Est-ce une bonne méthode ? il y a t'il plus simple (ou plus jolie)?

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 186
    Par défaut
    Est-ce que tu cherches à mettre en place un moteur de recherche pour ton site ?

    Si oui, la question a été posée plusieurs fois je crois sur le forum, il faut regarder du côté des plugins Lucene, ou suivre le tutorial Jobeet .

  3. #3
    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
    Je rajouterais à l'excellente réponse de spike2 que :

    le frontend et le backend sont des applications, que les modules admin peuvent parfaitement être inclus dans l'une ou l'autre de ces applications, sans limites.

    d'autre part, le filtre est généré par un objet sfFormFilter (ne pas confondre avec les sfFilter), et peut parfaitement être utilisé en dehors du module admin, moyennant un peu de travail de code autour. La lecture du code généré dans le cache par un module admin permet de ce faire une idée de la manière d'utiliser cet outils.

    et pour la fonction générale de recherche, effectivement, le plugin lucent est un plus appréciable.

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Par défaut
    Ben a priori, c'est pas un vrai module de recherche, c'est plus un module de filtre.

    J'ai une page avec mes infos, j'aimerais avoir un filtre afin de pouvoir avoir les informations plus précise et pas tous lire. Un peu comme le backend.

    Je doit donc faire comme les bout de code qu'avais donné mimi sur un autre topic ? Prendre ce qu'il y a dans le cache, le lire, et l'adapter au frontend ?

    Ou on peut générer ca automatiquement avec un generate-admin dans le frontend ?

  5. #5
    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
    Les modules admin ne sont que des modules, tu peux parfaitement les mettre dans le frontend, si cela conviens à ton application.

    Si non, j'ai déjà semé des bouts de code pour inclure dans le tableau l'objet filter. Et mon plugin avance, trop lentement, mais il avance. Il devrait résoudre cette question.

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Par défaut
    ouai dommage qu'il avance lentement :p

    Ben le problème du module admin c'est qu'il y a plein de truc qui ne m'interesse pas. Je pense que je vais tenter de bricoler un filtre avec les bouts de code que tu avais semé. Si je retrouve le topic

    J'ai trouvé ça mais j'ai un problème de route, des idées ?
    http://www.developpez.net/forums/d93...-module-admin/


    et je suis en train de lire ton code et essayé de virer les sort et les pagers (pas besoin pour le moment)
    http://www.developpez.net/forums/d89...ltre-debutant/

  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
    Si non, je vais semer à nouveau.

    J'en suis au troisième essai, le premier commencé à partir de rien, mais ce n'était pas top, trop de code à réinventer.

    Le deuxième en partant sur les object sfFormSymfony et autres, mais trop de code inutile qui venait parasiter les objets pour la liste.

    Le troisième qui me semble le bon en partant uniquement sur l'objet sfForm et en réécrivant le reste du code. J'arrive à sortir l'entête du tableau, mais pas encore avec le code pour les filtres. Cela va venir.

    Déjà, il ne me sort plus le tableau en code échapé, ce qui n'est pas terrible au niveau affichage

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Par défaut
    j'ai trouvé 2 liens (c.f. édition du message juste avant le tien).

    Pour le premier, j'ai fait comme c'est écrit et je ne comprend pas a quoi correspond $this->current_profile->getId()

    Et pour le deuxième, je suis en train de le lire.
    [édition]: J'ai trouvé grâce au premier lien. Voici les modification apporté
    1/Dans FactureTable.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A la place de $this->current_profile->getId() j'ai mis : $request->getParameter('id') étant donnée que c'est un formulaire, cela marche impecablement.
    2/ Dans la requête j'ai mis cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ->where('a.nom like %'.$nom.'%') au lieu de l'id afin de permettre une recherche un peu plus propre.
    3/ Dans _filters
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Remplacement de la route par facture/filter
    Je me tiendrais au courant le jour ou tu sortira ce plugins, je pense pas être le seul à attendre un plugins / intégration natif, des filtres propre pour le frontend

    [édition]: Maintenant, je vais tenté de regarder si je peut passer un tableau en paramètre pour avoir plusieurs éléments de filtre. Mais je ne sais pas si je doit tout faire à la mano (un gros if else ) ou si une méthode existe afin de faire une requête automatique

  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
    Pour le where, la syntaxe serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ->where('a.nom like "%?%"', $nom)

  10. #10
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Par défaut
    Ok merci, je modifie cela tout de suite.

    Sinon, comment fait-on pour avoir un tableau de valeur ? Faut-il que je fasse un switch sur mes filtres ? Parce que actuellement j'ai 1 filtre, donc j'ai juste un getByName($name). Si j'ai envie de passer par le nom et prénom j'aurais getByFirstName($firstName) et getByLastName($lastName) pouvant être appellé à la suite ou une seul méthode prenant un tableau ?

  11. #11
    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
    Utilise l'objet filtre de symfony.

    Il te génère le DQL nécessaire pour le filtre choisi.

  12. #12
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Par défaut
    Tu peux utiliser une méthode magique de ton modèle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    FactureTable::getInstance()->findByFirstnameAndLastname($firstname, $lastname);
    Ou firstname et lastname sont des textes.

    Ces méthodes sont déjà implémentées par Doctrine et symfony, ce serait dommage de ne pas les utiliser...

  13. #13
    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
    Je vais juste insister, mais pour utiliser des filtres disponibles auprès d'utilisateurs, l'objet filter est certainement le plus adapté.

    Que donnera une tel requête si un des deux paramètres est null ?

    Où si on veut rajouter un filtre sur une date ? Il y a beaucoup plus de possibilités pour générer et gérer des filtres utilisateur avec l'objet filtre.

    Dans le cadre d'une recherche avec des données sur, qui ne doivent pas être vérifiée, les solutions tel que findBy... sont parfaitement adaptées.

  14. #14
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Par défaut
    Pourrais tu me donner un lien vers les objets filtres? je ne vois pas à quoi cela correspond.

  15. #15
    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
    Il n'y a pas de documentation très explicite autour des objets filtres, il faut creuser le code pour en comprendre le fonctionnement.

    Dans ton projet, dossier : lib/filter, tu as les objets filtre utilisé et prêt à l'être pour ton application.

    Le mieux, pour voir du code autour de ces objets est de générer un module admin et d'explorer le code autour des filtres, pour ne comprendre le fonctionnement.

  16. #16
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Par défaut
    Voici mon retour sur les filtres. Finalement, les filtres du bakcend sont très bien adaptés pour le frontend.

    Voici comment je me suis organisé:
    On inclue le filtre dans le template indexSuccess.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php include_partial('filters', array('filters' => $filters)) ?>
    Créer un fichier nommée _filters.php à placer au même endroit qu'indexSuccess.php
    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('<nom du module>/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('<nom du module>/filter?_reset=1') ?>">Reset</a>
    </form>
    Enfin dans action.php:
    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
     
      public function executeIndex(sfWebRequest $request)
      {
        $this->filters = new ModuleFormFilter($this->getFilters());
        $this->votre_variable = $this->buildQuery();
      }
     
     public function executeFilter(sfWebRequest $request)
      {
        // RESET
        if ($request->hasParameter('_reset'))
        {
          $this->setFilters(array()); //reset, filtre vide
          $this->forward('<votre module>','index');
        }
     
        $this->filters = new ModuleFormFilter($this->getFilters());
     
        $this->filters->bind($request->getParameter($this->filters->getName()));
        if ($this->filters->isValid())
        {
          $this->setFilters($this->filters->getValues());
          $this->forward('<votre module>','index');
        }
     
        $this->setTemplate('index');
      }
     
      protected function getFilters()
      {
        return $this->getUser()->getAttribute('<votre module.filters', array());
      }
      protected function setFilters(array $filters)
      {
        return $this->getUser()->setAttribute('<votre module>.filters', $filters);
      }
     
      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();
      }
    Et voilà, c'est tout.

    NB: Si vous désiré initialisé une requête en filtrant, (exemple : trier par nom mais sans utiliser les sort) la méthode buildQuery() prend une variable en paramètre. Cette variable est une requête et donc un simple :
    $this->buildQuery(<ici votre requête sans le EXECUTE()>) dans la méthode executeIndex() suffit.

  17. #17
    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
    J'ai toujours dis que l'objet filter était un objet a utiliser dans nos développement.

    Reste qu'il manque un bel emballage pour faciliter la gestion d'une liste, de ses filtres et de ces tris.

    Ce plugin est mon prochain projet, dés que je peux me dégager quelques heures.

  18. #18
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Par défaut
    c'est sûr et même si pour le moment je ne pense pas que je ferais un autre projet web maintenant je suivrais avec attention ton plugin (pour le futur).

    Topic résolu. J'espère que cela aidera d'autre personne dans leur quête des filtres dans le frontend.

  19. #19
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 186
    Par défaut
    Sinon dans le même genre, on peut aussi utiliser la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    symfony doctrine:generate-admin frontend TableProduit --module=recherche
    A partir de là on obtient un module d'admin, il suffit ensuite d'aller dans le cache, de chercher les fichiers indexSuccess.php, _list.php (pour supprimer les partials permettant d'éditer et supprimer par exemple), et _list_td_tabular.php (pour par exemple changer le lien qui redirge vers l'action show d'un objet)

    Le tout avec le generator.yml pour lister les filtres et tout le reste comme on le ferait dans le backend. Je crois que c'est aussi simple de faire comme ça, pour ma part.

  20. #20
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Par défaut
    Ce qui m'embêtait était de devoir regénérer un module alors que le mien était fini. Il manquait plus que les filtres.

    Donc bon, je me suis un peu cassé la tête mais finalement maintenant, il y a plus que 3/4 lignes à modifier pour que cela marche sur un autre module.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. question concernant les fichier.bin
    Par argon dans le forum Autres Logiciels
    Réponses: 10
    Dernier message: 27/08/2005, 17h44
  2. Questions concernant les études supérieures et travails
    Par Vivian Pennel dans le forum Etudes
    Réponses: 25
    Dernier message: 21/06/2005, 15h23
  3. Réponses: 11
    Dernier message: 21/06/2005, 10h16
  4. [Débutant] Deux questions concernants les vues
    Par 13obscur dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 19/04/2005, 14h29
  5. Réponses: 7
    Dernier message: 10/09/2004, 14h28

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