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 :

Modifier le comportement d'un module admin


Sujet :

Symfony PHP

  1. #1
    Membre émérite

    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    690
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 690
    Par défaut Modifier le comportement d'un module admin
    Bonjour,
    J'ai généré un module d'admin avec symfony, mais la je voudrais le modifier un peu pour mieu répondre au besoins :
    Le module conserne une table de la bd qui possède une clé étrangère. Dans la partie 'edit' de mon module, au lieu de l'ID numérique stoqué dans la table, je voudrais afficher une description dans la table référencée par la clé étrangère. En gros je veux afficher des info d'une autre table dans une liste déroulante.
    Voici mon schéma de bd pour être plus clair :
    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
     
    propel:
      produit:
        id:             ~
        titre_produit:  varchar(200)
        sous_titre_produit: longvarchar
        prix:           float
        code_isbn:      varchar(10)
        code_barre:     varchar(13)
        created_at:     ~
        editeur_id:     ~
    ...
      editeur:
        id:             ~
        nom_editeur:    varchar(50)
        site_web:       varchar(50)
        created_at:     ~
     
    ...
    Voila ! je créer un admin pour Produit, lorsque je veux ajouter ou modifier un produit, il faut que la liste de tous les éditeurs s'affiche et mette à jour le champs editeur_id.

    J'ai réussi a avoir une liste des éditeurs avec comme id le code éditeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php use_helper('Object'); ?>
    <?php echo select_tag('editeur',objects_for_select(EditeurPeer::getAll(), 'getId', 'getNomEditeur')); ?>
    Mais biensur quand j'ajoute ce partial, le champ editeur_id n'est pas relié à ce select, donc pas de mise à jour.

    quelqu'un connaitrait il un autre moyen ?

  2. #2
    Membre chevronné Avatar de nicocsgamer
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 321
    Par défaut
    Dans ta création de ton produit tu utilise la fonction setEditeurId(). Pour la valeur tu récupére celle de ton select.

  3. #3
    Membre émérite

    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    690
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 690
    Par défaut
    Oui, en temps normal j'aurais fait sa. Mais la c'est un module d'admin généré par propel, les actions et les templates sont dans le dossier cache. Donc a moins de surcharger la methode qui save le produit dans actions.class.php (ce que je ne veux pas faire pour ce petit cas), je n'ai pas d'autre moyen de modifier le comportement du module qu'avec les partials et les generators...

    Donc je voudrais créer un partial qui update le champ editeur_id de la table produit. Et ce partial doit être la liste (id, nom) de tous les éditeurs. Pour la liste c'est bon, mais pour updater le champ je rame encore.

  4. #4
    Membre émérite

    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    690
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 690
    Par défaut
    J'ai trouvé !!!
    Il suffit d'appeler le select nomdeclasse[nomdechamp], ou nom de classe est le nom de la classe de l'objet à créer ou modifier, et nom de champ et le nom de champ à modifier. Mon select deviens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php use_helper('Object'); ?>
    <?php echo select_tag('produit[editeur_id]',objects_for_select(EditeurPeer::getAll(), 'getId', 'getNomEditeur', $produit -> getEditeurId())); ?>
    Merci Nico pour ton aide, elle est très précieuse pour ce forum !

  5. #5
    Membre émérite

    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    690
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 690
    Par défaut
    Petit ajout assez bizarre je trouve :
    Il faut que le nom du partial soit le même que celui du champ à modifier. Exemple : je veu modifier le champ produit_id, mon partial DOIT se nommer _produit_id.php. Est ce que quelqu'un a entendu parler de ça ?

  6. #6
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2
    Par défaut
    salut
    Dans ton cas, pas besoin définir un partial. Le mieux c'est de gérer ça dans le generator.yml.
    Pour cela, il est très important que ton schema soit bien défini.
    (tu vas devoir regénérer le modèle à mon avis)
    moi j'écrirai ça:
    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
     
    propel:
      produit:
        id:             ~
        titre_produit:  varchar(200)
        sous_titre_produit: longvarchar
        prix:           float
        code_isbn:      varchar(10)
        code_barre:     varchar(13)
        created_at:     ~
        editeur_id:      { type: integer, foreignTable: editeur, foreignReference: id, onDelete: cascade }
    ...
      editeur:
        id:             ~
        nom_editeur:    varchar(50)
        site_web:       varchar(50)
        created_at:     ~
    ...
    Ensuite, pas besoin de regénerer le module Produit avec admin generator.
    Tu vas dans racine_de_ton_projet/lib/model/Editeur.php(pas EditeurPeer.php)
    et tu ajoutes ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function __toString()
    		{
    			return $this-> getNomEditeur();
    		}
    Next, Dans ton generator.yml, tu peux ajouter ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    generator:
      class:              sfPropelAdminGenerator
      param:
        model_class:      Produit
        theme:            default
     
        fields:                                                    
          nom_editeur:  { name: Nom de l éditeur  }
        list: 
          display: [nom_editeur]  # ajouter les autres champs que tu souhaites administrer
        edit:
          display: [nom_editeur]  # ajouter les autres champs que tu souhaites administrer
    Donc voilà, Comme ça, tout est géré par l'admin generator de symfony(l'écriture en base, la mis à jour dans la table editeur, etc..). En tout t'auras pas écris une ligne de php.(bon y a le __toString(avec 2 underscores))..

    Il faut biensur enlever ce que t'as mis dans ton templates..et vider le cache (symfony cc en ligne de commande)

    Un dernier truc, tu peux enlever le deleteOnCascade dans le schema.yml.. si t'as pas besoin d'effacer en cascade.

  7. #7
    Membre émérite

    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    690
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 690
    Par défaut
    Merci beaucoup !
    très propre comme solution, ça me dérangeait un peu de devoir ecrire un partial pour chaque join...
    Peux tu me dire ou je peux trouver la documentation pour voir les options des fichiers yaml pour la spécification de schéma de BD ?

  8. #8
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2
    Par défaut
    Oui en fait le partial va modifier le comportement de base de l'admin symfony.. Normalement tu peux presque tout faire avec les fichiers de configuration.. Il reste toujours à trouver la méthode..avec symfony rien n'est simple au début. Mais une fois tu commences à maîtriser bien le framework, ça va super vite.

    Sinon pour les options diverses des fichiers yml, il y a le chapitre consacré dans le livre de sumfony(tu l'a déjà regarder surement).. Sinon la cheat sheet de l'admin generator est vraiment pas mal foutu, ça synthétise pas mal de choses...

    à part ça tu peux apprendre énormément dans les snippets sur le site de symfony (c'est des bouts de code expliqués, tu trouve souvent des gens qui ont exposé un prolème que tu rencontres).. tu peux aussi parcourir les snippets par tag, ce qui est très utile(pour regarder tout les snippets en rapport avec l'admin par exemple).

    En fait, le succès de symfony est entrain de se réaliser en partie grâce à la communauté qui est derrière.. il y a de plus en plus de doc tous les jours.

    allez bonne chance,

  9. #9
    Membre émérite

    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    690
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 690
    Par défaut
    Oui merci !
    J'ai vu sur le livre les possibilité (et limitations) de yml pour la description des bases de données. Mais trouvez vous cela normal que TOUS les type de données MySql ne soient pas disponibles dans les attributs d'un fichier YML... Je pense particulièrement au type ENUM ou BLOB.
    Est ce volontaire pour assurer l'abstraction (un genre de plus petit dénominateur commun) ?
    Sinon, comment pourrais je représenter ce type de données ?

    Merci pour votre aide les gars, j'ai vraiment avancé grace a vous !

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/04/2011, 11h40
  2. [1.x] modifier l'ordre des champs dans un module admin-generator
    Par belgacem.tlili dans le forum Symfony
    Réponses: 8
    Dernier message: 12/08/2010, 10h25
  3. Modifier le comportement d'une fenêtre de choix
    Par Nalmo dans le forum Applets
    Réponses: 1
    Dernier message: 03/11/2006, 10h50
  4. modifier le comportement d'ArrayList
    Par Zorgz dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 09/10/2006, 13h31
  5. [D7] Modifier le comportement d'un FieldKind = fklookup
    Par Débéa dans le forum Bases de données
    Réponses: 4
    Dernier message: 30/01/2006, 12h31

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