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 25/05/2011, 11h50   #1
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 311
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 311
Points : 33
Points : 33
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 :
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!!
flora806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 12h15   #2
Membre habitué
 
Avatar de Maerlyn31
 
Homme Baptiste Naudinat
Développeur Web
Inscription : mai 2011
Messages : 70
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Naudinat
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2011
Messages : 70
Points : 146
Points : 146
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 :
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 :
1
2
3
4
5
 
<?php if(!$article->getEtat()): ?>
...
...
 <?php endif: ?>
Et tu devrais obtenir le comportement que tu souhaite !

See ya !
Maerlyn31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 14h07   #3
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 311
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 311
Points : 33
Points : 33
Merci Maerlyn31 pour ta réponse,
j'ai essayé d'appliquer ton code, mais j'ai une erreur par rapport au template:

Code :
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?
flora806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 14h42   #4
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
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.
__________________
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 25/05/2011, 14h47   #5
Membre habitué
 
Homme Ludovic
Étudiant
Inscription : janvier 2011
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 124
Points : 140
Points : 140
Ton template doit avoir le même que celui des actions soit _list_td_actions.php et il le remplacera.
PeytaWodka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 15h05   #6
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 311
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 311
Points : 33
Points : 33
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?
flora806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 15h25   #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
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 ?
__________________
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 25/05/2011, 16h38   #8
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 311
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 311
Points : 33
Points : 33
Merci pour toutes ces explications!!
j'ai vérifié dans le cache, il y a bien tous les templates autogénérés..
je comprend mieux mnt le fonctionnement, mais j'arrive toujours pas à résoudre le problème de récupération de l'objet $article dans le template.

si c'est compliqué à faire, je ne sais pas s'il existe un autre moyen que celui là pour appliquer une action selon la valeur d'un champs..
flora806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 12h15   #9
Membre habitué
 
Avatar de Maerlyn31
 
Homme Baptiste Naudinat
Développeur Web
Inscription : mai 2011
Messages : 70
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Naudinat
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2011
Messages : 70
Points : 146
Points : 146
@flora806 :

Ton admin generator parle d'une gestion d'article, j'ai donc supposé que ton objet s'appelait "Article", d'où la variable $article. Tu dois remplacer ce nom de variable par celui de ton code. Pour ce qui est du getEtat(), c'est aussi un exemple. Tu dois écrire la méthode get() qui correspond à la récupération du statut.

Par exemple, si ton objet s'appelle "News" et que d'un point de vue base de donnée son état est un booléen stocké dans la colonne "actif", il faudra écrire

$news->getActif()

@Michel :

J'ignorais l'existence des partials vides, mais je vois bien l'interêt de ne pas surcharger les templates qui sont re-générés à chaque modification du generator.yml.
Je viens de jeter un coup d'oeil dans le cache d'un projet, et je n'arrive par contre pas à localiser le template qui correspondrait à une surcharge "propre" de _list_td_actions.
Dans le partial _list, qui génère la structure du tableau, les partials _list_footer et _list_header ne sont appelés nulle part
As-tu quelques précisisons sur ces surcharges non bloquantes ?
Maerlyn31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 10h08   #10
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 311
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 311
Points : 33
Points : 33
Merci pour ta réponse,
oui j'ai bien compris le principe d'appel de l'objet, dans mon cas mon objet s'appelle "article" dans la base de données, et je fais:
Code :
1
2
 
$article->getEtat()
pourquoi je dois écrire la méthode getEtat()? normalement ça se fait automatiquement dans symfony. Etat ça représente bien un attribut de la classe "article".

Par ailleurs, j'ai une autre question, est-ce que dans symfony, on peut générer deux modules admin à partir de la même table?
flora806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 10h53   #11
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
Il n'y a pas de limite au nombre de modules (auto-généré ou non) qui peuvent être généré et/ou créé à partir d'un objet du modèle (table en général).

Il y a 4 partial "vide" : form_footer, form_header, list_footer et list_header. Il n'y a pas de partial pour le détail d'un enregistrement.

Les partials list_footer et list_header sont appelés depuis le templade indexSuccess.
__________________
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 15h28.


 
 
 
 
Partenaires

Hébergement Web