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: appliquer une action selon la valeur d'un champs


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 Admin generator: appliquer une action selon la valeur d'un champs
    Bonjour,

    j'ai généré le backend de mon appli, et j'ai ajouté une action personnalisée "activer". Je voudrais appliquer cette action selon la valeur d'un champs, càd uniquement lorsque le champs "etat=inactif", comment je pourrais spécifier ça au niveau du generator.yml?

    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        config:
          actions: ~
          fields: ~ 
          list:    
            title: Gestion d'articles
            display: [=id, nom, ref, fournisseur, etat]
            sort: [created_at, desc]
            max_per_page: 5
            object_actions:
              _edit:    { label: Modifier }  
              _delete: { label: Supprimer }
              _activer: { label: activer , action: Activer }

    Merci pour votre aide!!

  2. #2
    Membre éprouvé Avatar de Maerlyn31
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 71
    Par défaut
    Salut Flora806 !

    Je ne pense pas que ce genre de configuration fine puisse se faire directement par le fichier generator.yml.

    Par contre, tu peux coder ce genre de comportement en surchargeant un template de ton module :

    D'abord, visualise quelques pages de ton module pour charger le cache

    Ensuite, va dans cache/backend/dev (ou prod c'est pareil)/modules/TON_MODULE/autoMODELE/

    Le template qui t'interesse va être je pense "_list_td_actions.php"
    Copie le, et colle le dans le répertoire template de ton module "réel" (dans apps/backend/...)

    Tu dois ensuite y trouver une ligne du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        <li class="sf_admin_action_modifierstatut">
          <?php echo link_to(__('Modifier l'état', array(), 'messages'), 'produit/ListModifierStatut?id='.$produit->getId(), array()) ?>
        </li>
    il te suffit de rajouter autour de ce bloc quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php if(!$article->getEtat()): ?>
    ...
    ...
     <?php endif: ?>
    Et tu devrais obtenir le comportement que tu souhaite !

    See ya !

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    Merci Maerlyn31 pour ta réponse,
    j'ai essayé d'appliquer ton code, mais j'ai une erreur par rapport au template:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Notice: Undefined variable: article in .....\monTemplate.php
     
    Fatal error: Call to a member function getEtat() on a non-object
    c'est dû à quoi?

  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
    On va être d'accord sur le fait que l'on est un peu "hors norme".

    Le défaut de la méthode proposée par Maerlyn31 est de modifier un élément auto généré. Il faudra refaire ceci à chaque modification du generator.yml. Ce qui me semble un peu lourd.

    Tu as des partial, vide, qui peuvent être modifié pour ce type d'élément. L'avantage est que tu ne vas pas modifier la partie générée. L’inconvénient est que ton action ne sera pas dans la même partie du form. Regarde du côté des partial footer du module.

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    j'avoue que je comprends pas trop le fonctionnement des partials et des partials footer en backend..Michel si t'as des liens là-dessus, j'en serai reconnaissante

    Sinon, si j'utilise l'include_partial et le template (contenant ce qui m'intéresse de _list_td_actions.php) , est-ce que quelque part dans le controleur du module backend, je dois ajouter une action qui doit me renvoyer les $articles..pour pouvoir les récupérer dans le template?

  6. #6
    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
    Un partiel peut, dans le cadre des templates, être comparé à une fonction dans le cadre de la programmation.

    Il est appelé avec des paramètres (en général les date ou le form) et permet soit de factoriser le code, soit de le découper en plusieurs petites unités fonctionnel, ce qui est le cas dans les module auto-générés.

    Regarde dans ton cache, dev ou prod, modules, autoQuelquechose tu y trouveras un dosser template et tous les templates et partiel générés pour ce module (il faut avoir exécuter au moins une fois le module depuis le dernier cc...). Accessoirement, tu trouveras dans le dossier action le code de l'action, intéressant à consulter aussi.

    A partir de là, dans le dossier apps/<monApplication>/modules/<MonModuleAutoGenere>/... tu peux mettre soit des partiels (templates/...) soit le fichier action et modifier le déroullement de l'auto généré. Pour l'action.class.php il n'y a pas de difficultés majeur si tu fait appel aux parents (d'ailleur le fichier est déjà présent). Pour les templates et les partiels il n'y a pas de notion d'héritage. Si tu mets un fichiers du caches dans le dossier template de ton modules dans apps, il remplace définitivement celui qui est auto-généré à chaque modification du generator.yml.

    Mais certains sont volontairement vides : form_footer, form_header, list_footer et list_header font partie de ces partials vides. Pourquoi générer des fichiers vides et y faire appel à chaque génération de l'écran ? Pour te permettre de mettre des modifications permanentes dans l'écran généré sans risquer d'écraser la partie auto-généré.

    Est-ce plus claire ?

  7. #7
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 124
    Par défaut
    Ton template doit avoir le même que celui des actions soit _list_td_actions.php et il le remplacera.

Discussions similaires

  1. [MySQL] Filtrer des éléments d'une liste selon plusieures valeurs d'un champ d'une table bdd
    Par amdawb dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 08/02/2015, 16h59
  2. Colorier une ligne selon la valeur d'un champ
    Par special-k dans le forum Composants
    Réponses: 5
    Dernier message: 21/05/2010, 17h43
  3. Trier une table selon la valeur d'un champ
    Par nandofive dans le forum Débuter
    Réponses: 4
    Dernier message: 23/11/2008, 09h18
  4. Réponses: 4
    Dernier message: 23/04/2007, 15h01
  5. Réponses: 5
    Dernier message: 28/08/2006, 19h11

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