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 :

Admin generator : ajouter fonction de tri sur une colonne de la liste


Sujet :

Symfony 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 Admin generator : ajouter fonction de tri sur une colonne de la liste
    Bonjour à tous,

    Soit un module d'admin généré par le doctrine:generate-admin classique. Ma page de liste propose la liste des objets et plusieurs colonnes.

    Soit mon objet Machinchouette, qui a un champ configuration_id (clé étrangère vers une table Configuration).

    Dans le generator.yml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          list:
            display: [configuration_id]
    me donne une colonne "configuration_id" avec la fonction native de tri implémentée par le pager de symfony. Bien commode mais hélas, c'est l'id qui est affichée (et non le résultat de la méthode __toString() de la Configuration).

    Mais si je modifie le generator.yml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          list:
            display: [configuration]
    j'obtiens une colonne "configuration" avec le libellé, ce qui est bien - mais la fonction de tri a disparu, ce qui est mal.

    D'où ma question : que puis-je faire pour récupérer cette fonction de tri ?

  2. #2
    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
    Je diras qu'à priori tu ne peux pas.

    Vu que tu n'affiches qu'une table et que celle-ci ne comporte que l'ID. Trier sur le _toString() implique que symfony devrait être capable de décortiquer ton code pour comprendre comment tu construits l'affichage et, de là, en déduire une méthode de tris ! Tu lui en demande beaucoup là.

    Imagine une méthode _toString() sur des personnes qui retournerait : "(Société) Nom Prénom". Il faudrait que symfony soie capable de comprendre qu'il doit trier sur la société, puis le nom, puis le prénom !

    Accessoirement, méfie toi d'un _toString() de ce type dans une liste, tu risques d'avoir rapidement un nombre de requête sur la BDD très important...

    Si tu veux pouvoir réaliser cela, il va falloir écrire une méthode sur ton objet du modèle qui te retourne les champs que tu veux utiliser sur les deux tables en question. Et je ne sais absolument pas si le générateur d'amin est capable de s'en sortir sur ce type de requêtes "multi objets", jamais testé.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 100
    Points : 123
    Points
    123
    Par défaut
    Sinon si tu veut juste afficher le "champs" configuration, tu peut utiliser la méthode suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          list:
            display:            [configuration_id]
            layout:             stacked
            params:            %%configuration%%
    Mais à ce moment la, si tu veut afficher d'autre champs, ils ne seront plus bien ranger par colonne...

  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
    OK, merci pour vos réponses

    En réalité, je veux afficher pas mal d'autres champs, j'ai juste simplifié la présentation du problème. Il va quand même falloir que je trouve une astuce pour régler cela, ça s'annonce pas simple mais - heureusement - pas prioritaire sur le projet actuel. Peut-être qu'en allant farfouiller dans le code du sfPager je trouverai quelque chose à bidouiller.

  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
    sfPager ne gère ni le tris, ni le filtre.

    Donc si tu veux farfouiller c'est dans le code du contrôleur et est, ici, auto-générer.

    Il faut donc envisager de modifier le code du contrôleur et perdre une bonne partie de la souplesse d'utilisation.

    Il y a peut-être une autre solution, pas très propre, pas testée... (aie pour toi ! ), utiliser les vues de la base de données, définir dans ton shema un modèle qui correspond à la vue et générer sur le model correspondant à la vue. Ceci implique de perdre la liaison entre le shema et la structure physique, les deux devant être manipulé indépendamment, adieu "build --all" et bonjour les contraintes

  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
    Passer par une vue est en soi une bonne idée, j'ai utilisé ce genre de techniques à plusieurs reprises dans de gros projets pour simplifier les requêtes, mais évidemment je n'avais pas à interagir avec les contraintes de Symfony.

    J'avoue que déclarer la vue dans le schema et voir des build* passer dessus ne m'inspire pas du tout confiance, ça va être un sac de noeuds terrible.

    Par contre, en restant dans l'esprit de ta suggestion, il suffirait peut-être d'ajouter des colonnes "calculées" à mon modèle, un peu comme l'est la colonne slug quand on rend un objet sluggable.

    Et même, en poussant un peu plus loin, de créer un comportement (behaviour) associé pour pouvoir réutiliser tout ça plus facilement car bien entendu, la question va se poser pour plusieurs objets de mon modèle. Là par contre, je m'avance peut-être car je n'ai pas encore fouillé dans le code Doctrine pour voir comment cela fonctionnait...

  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
    Je pense que sans un behaviour ton système ne peux pas marcher. Par contre il serait intéressant à avoir.

    Quitte a avoir un behaviour de table qui lui dise que, pour cette table, c'est de la lecture seulement et qu'il n'y a pas de sql à générer.

    Et packager le tous dans un plugins

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Pour ma part j'ai suivi ce tuto :
    http://www.elao.org/symfony/symfony-...trangeres.html

    Si ca peux t'aider

  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
    Ha, voilà qui me plait mieux !
    Et c'est plus propre que d'ajouter des Behaviours.

    J'essaye ça dès que je trouve un créneau. Merci pour l'info

  10. #10
    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
    Solution qui me semble (jusqu'à un hypothétique essais) très élégante.

Discussions similaires

  1. Tri sur une colonne d'un champs calculé DBGRID
    Par BuzzLeclaire dans le forum Bases de données
    Réponses: 13
    Dernier message: 18/02/2009, 15h13
  2. Réponses: 5
    Dernier message: 03/11/2008, 16h59
  3. Réponses: 4
    Dernier message: 12/08/2008, 12h20
  4. tri sur une colonne
    Par cubepiege dans le forum Langage SQL
    Réponses: 11
    Dernier message: 13/07/2006, 12h16
  5. [JSP] tri sur une colonne
    Par soony dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 28/07/2005, 15h02

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