Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/02/2011, 10h59   #1
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 769
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 769
Points : 788
Points : 788
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 :
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 :
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 ?
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 11h19   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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é.
__________________
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 13h36   #3
Membre habitué
 
Homme Ludovic Henry
Étudiant
Inscription : octobre 2009
Messages : 97
Détails du profil
Informations personnelles :
Nom : Homme Ludovic Henry
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2009
Messages : 97
Points : 105
Points : 105
Sinon si tu veut juste afficher le "champs" configuration, tu peut utiliser la méthode suivante :

Code :
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...
Inarius est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/02/2011, 11h02   #4
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 769
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 769
Points : 788
Points : 788
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.
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 11h10   #5
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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
__________________
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 14h47   #6
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 769
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 769
Points : 788
Points : 788
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...
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 15h00   #7
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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
__________________
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 11h20   #8
Invité régulier
 
Inscription : 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 : 6
Points : 6
Bonjour,

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

Si ca peux t'aider
FloYo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/02/2011, 19h30   #9
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 769
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 769
Points : 788
Points : 788
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
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 10h25   #10
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Solution qui me semble (jusqu'à un hypothétique essais) très élégante.
__________________
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h14.


 
 
 
 
Partenaires

Hébergement Web