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 :

Plusieurs formulaire dans une boucle - Comment faire ?


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut Plusieurs formulaire dans une boucle - Comment faire ?
    Bonjour,

    Je suis entrain de développer un formulaire en SF4 pour gérer les oppositions entre joueurs de mon club de tennis. En gros j'ai une entité joueurs et une entité matchs. L'entité joueurs comprend essentiellement le nom du joueur et son id. L'entité Matchs, qui liste simplement les oppositions entre joueurs en fonction d'une date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Entity joueurs
    Id
    nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Entity matchs
    Id
    date
    joueur1
    joueur2
    Pour le moment je réussi à afficher une ligne de formulaire. Et enregistrer les oppositions une par une. Comme ceci

    Nom : form1.jpg
Affichages : 2516
Taille : 16,1 Ko

    Par contre je souhaiterais afficher et enregistrer par exemple 10 oppositions en même temps ou individuellement afin de créer par exemple comme dans le foot, des Journées. Ou chaque lot de 10 oppositions, constituerait une journée.

    Nom : entite.jpg
Affichages : 2685
Taille : 81,7 Ko

    J'ai essayé toute sorte de chose mais je n'y arrive pas. Quelqu'un saurait-il m'orienter vers une méthode ?

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2019
    Messages : 67
    Points : 72
    Points
    72
    Par défaut
    Salut,

    Peux-tu donner un exemple de ton code pour qu'on puisse t'aider ?

    Je suis pas sur d'avoir bien compris, mais si tu veux juste créer tes 10 formulaires dans une boucle depuis ton controller tu peux faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $i = 0;
     
    while ($i <10) {
          $form . $i = $this->createForm(FormType::class, new Entity(), array(
                'action' => $this->generateUrl('url_route'),
            ));
    }
    Désolé si je réponds à côté mais n'hésite pas à apporter des précisions
    Si tu bloques sur un point en particulier (affichage du formulaire ? traitement des formulaires après post, etc)

    EDIT : et je crois que j'ai répondu à coté, dans ton cas il s'agirait surement simplement d'un seul formulaire.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut Précision
    Oui Phimau. Effectivement, il s'agit d'un seul formulaire qui enregistre plusieurs ligne à la fois. Pour faire simple. Voici mon controller
    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
     
     
            $match = new Matchs();
            $form = $this->createForm(MatchsAddForm::class, $match);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
     
                $em->persist($match);
                $em->flush();
     
            }
     
            return $this->render('matchs/add.html.twig', array(
                'form' => $form->createView()
                    ));
    Dans ce cas. Ma vue me renvoie ceci. Avec les 2 sélectt qui permettent de choisir les 2 joueurs qui vont s'affronter.

    Nom : form1.jpg
Affichages : 2511
Taille : 16,1 Ko

    Or ce que je souhaiterais avoir c'est plusieurs ligne de cette sorte. Comme ça je peux créer 10 oppositions par exemple. Et qu'en j'enregistre. Il m'insère les 10 lignes dans ma base. Si on fait le parallèle avec le football. Ca serait de créer les 10 matchs correspondant à la journée 1. Puis les 10 matchs correspondant à la journée 2. Ainsi de suite.

    Nom : entite.jpg
Affichages : 2518
Taille : 81,7 Ko

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par PhiMau Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $i = 0;
    
    while ($i <10) {
          $form . $i = $this->createForm(FormType::class, new Entity(), array(
                'action' => $this->generateUrl('url_route'),
            ));
          $i++;
    }

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2019
    Messages : 67
    Points : 72
    Points
    72
    Par défaut
    Hello,

    Du coup tu sais que ton formulaire contiendra ces 10 oppositions, c'est à dire 10 lignes avec 2 select chacune.

    A priori rien d'insurmontable, tu construis ton FormType depuis ton Controller, en lui passant les bonnes données (c'est à dire la liste des joueurs) et tu l'affiche comme tu veux dans TWIG.
    Je crois pas que tu vas utiliser de boucle, ton formulaire sera toujours le même, et lors de la validation tu auras forcément tes 10 matchs de créés et insérés en BDD à chaque fois.

    Du coup tu bloques sur la construction du formulaire ? La validation ? l'affichage ? Passer les données au formulaire ? Si tu veux une exemple de code pas de soucis mais ce sera générique forcément...

    Bon courage

  6. #6
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    Je me permet de relance le sujet car j'ai exactement le même besoin que yamatoshi mais je n'y arrive pas.
    J'ai une liste de produit dans un tableau et je souhaite que l'utilisateur puisse ajouter notamment un commentaire (+ d'autres infos) dans chacun d'eux à travers un tableau / sur une même page sans forcément avoir à cliquer sur 1 seul à la fois qui ouvrira 1 autre page.

    J'ai construis mon FormType qui a 4 champs mais je n'arrive pas à l'afficher X fois sur ma page par rapport au nombre de donnée.
    J'ai pourtant le suivi le conseil de PhiMau je construis le form type et je lui passe les données... Mais j'ai toujours 1 seul formulaire qui s'affiche, qui plus est, vide.

    Merci pour votre aide !

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2019
    Messages : 67
    Points : 72
    Points
    72
    Par défaut
    Il faudrait poster des bouts de votre code (vue, controller, form type) car c'est vague et il y a plusieurs solutions possibles.

  8. #8
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Pas de problème, je n'osais pas trop empiéter sur le sujet de yamatoshi

    FormType :
    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
     
     public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('nom', TextType::class, $this->getConfiguration("Nom du produit", "Nom complet du produit - HE /  HV / Hy etc."))
                ->add('latin', TextType::class, $this->getConfiguration("Nom latin", "Nom latin du produit - HE /  HV / Hy etc."))
                ->add('type', EntityType::class, [
                    'class' => TypeProduit::class, 
                    'choice_label' => 'libelle',
                    'query_builder' => function(TypeProduitRepository $repo){
                        return $repo->createQueryBuilder('t')
                                    ->orderBy('t.libelle', 'ASC');
                    }
                ], 
                $this->getConfiguration("Sélectionnez une catégorie", "Sélectionner un catégorie"))
                ->add('moderation')
                ;
        }

    le controller ---> sachant que $AllProduitsFalse contient plusieurs produits...
    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
     
        /**
         * @Route("/admin/produit/moderation", name="admin_produit_moderation")
         */
        public function moderation(ProduitRepository $repoProduit)
        {   
     
            $AllProduitsFalse = $repoProduit->findProduitFalse();
     
            $form = $this->createForm(AdminProduitType::class, $AllProduitsFalse);
     
            return $this->render('admin/produit/moderation.html.twig', [
                'AllProduitsFalse' => $AllProduitsFalse,
                'form' => $form->createView(),
            ]);
        }
    Et du coup dans ma vue j'affiche (mais j'ai qu'un seul form qui s'affiche et vide en plus...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    {{ form_start(form) }}
    {{ form_widget(form) }}
     {{ form_end(form) }}
    L'objectif c'est d'afficher dans un tableau les champs des produits afin de pouvoir modifier toute la liste d'un coup
    produit 1 | nom latin du produit 1 | type | modération oui/non
    produit 2 | nom latin du produit 2 | type | modération oui/non
    produit 3 | nom latin du produit 3 | type | modération oui/non

    Je sens que je suis pas loin... mais c'est tout xD

    Merci d'avance !

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2019
    Messages : 67
    Points : 72
    Points
    72
    Par défaut
    Si tu pars sur l'idée de créer plusieurs formulaires indépendants (via une boucle comme l'exemple que j'avais posté) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            $AllProduitsFalse = $repoProduit->findProduitFalse();
            $forms = [];
     
            foreach ($AllProduitsFalse as $produit) {
                $form = $this->createForm(AdminProduitType::class, $produit);
                $forms[$produit->getId()] = $form->createView();
            }
     
            return $this->render('admin/produit/moderation.html.twig', [
                'AllProduitsFalse' => $AllProduitsFalse,
                'forms' => $form->createView(),
            ]);
    En gros cela va créer autant de formulaire que tu as de produits, et tu pourras les appeler dans ta vue (dans ta boucle) en faisant quelque chose comme :
    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {% for produit in AllProduitsFalse %}
    {{ form_start(forms[produit.id]) }}
    {{ form_row(forms[produit.id]) }}
    {{ form_end(forms[produit.id]) }}
    {% endfor %}

    Le problème c'est que cela créé plusieurs formulaires indépendants et qu'à priori ils ne seront pas validés d'un seul coup mais un par un...
    J'image que ça répond pas vraiment à ta demande et j'avoue que cette méthode me parait pas super propre

    Sinon peut être qu'il faudrait mieux créer les champs de manière dynamique, via une boucle à l'intérieur du FormType (et n'avoir qu'un seul formulaire global) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     public function buildForm(FormBuilderInterface $builder, array $options)
        {
           foreach($options['AllProduitsFalse'] as $produit) {
               $builder->add('nom' . $prduit->getId(), TextType::class, $this->getConfiguration("Nom du produit", "Nom complet du produit - HE /  HV / Hy etc."));
          }
        }
    Ou perso je crois que je n'utiliserai même pas de FormBuilder, et que je balancerai des input text dans une boucle (dans la vue twig) et que je ferai un traitement via javascript / ajax...

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Points : 107
    Points
    107
    Par défaut
    J'avais exactement ce problème il y a quelques jours et j'ai trouvé une solution que je pense plutôt élégante.
    Je ne sais pas si le sujet est encore d'actualité mais ça aidera peut-être d'autres personnes.

    Vous pouvez crée un formulaire "Collection" qui va contenir la collection de vos sous-formulaires.

    Le formulaire de base ressemble à ça (EntityB est juste là pour l'exemple mais vous mettez les champs que vous voulez, bien sur) :
    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
     
    class EntityAType extends AbstractType {
    	public function buildForm(FormBuilderInterface $builder, array $options) {
    		$builder
    			->add('property_a')
    			->add('property_b', EntityType::class, [
    				'class' => EntityB::class
    			]);
    	}
     
    	public function configureOptions(OptionsResolver $resolver) {
    		$resolver->setDefaults([
    			'data_class' => EntityA::class,
    		]);
    	}
    }
    Pour l'instant c'est simple. Ensuite je crée un formulaire "Collection" qui va regrouper une collection du formulaire EntityAType :
    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
     
    class EntityACollectionType extends AbstractType {
    	public function buildForm(FormBuilderInterface $builder, array $options) {
    		$builder
    			->add('EntityACollection', CollectionType::class, [
    				'entry_type' => EntityAType ::class,
    				'entry_options' => ['label' => false]
    			])
    			->add('Submit', SubmitType::class);
    	}
     
    	public function configureOptions(OptionsResolver $resolver) {
    		$resolver->setDefaults([
    			'data_class' => null,
    		]);
    	}
    }
    La property EntityACollection peu prendre n'importe quel nom, il faudra juste être cohérent dans le controler.
    On voit également bien que le bouton de submit sera global à toute la collection.

    Le contrôler, c'est là ou la magie opère. Il me suffit d’instancier le form EntityACollectionType et de lui passer un tableau d'objet EntityA et pouf ça fonctionne !

    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
    20
     
    	public function myAction(Request $request) {
     
                    [...]
     
    		$entityAArray= $this->getDoctrine()->getRepository(EntityA::class)->findAll();
     
    		$formCollection = $this->createForm(EntityACollectionType ::class, ['EntityACollection' => $entityAArray]);
     
    		$formCollection ->handleRequest($request);
    		if ($formCollection ->isSubmitted() && $formCollection ->isValid()) {
    			$submittedEntityAArray= $formCollection ->getData();
                            $em->persist($submittedEntityAArray);
                            [...]
    		}
     
    		return $this->render('myTemplate.html.twig', [
    			'form_collection' => $formCollection ->createView(),
    		]);
    	}
    Voilà très simple, c'est simplement assez mal documenté

    PS : Je n'ai pas testé ce code car je l'ai simplifié par rapport à celui que j'utilise. Il n'est pas impossible qu'il y ait des petites erreurs de syntaxes.

  11. #11
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par NoPr0n Voir le message
    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
    20
     
    	public function myAction(Request $request) {
     
                    [...]
     
    		$entityAArray= $this->getDoctrine()->getRepository(EntityA::class)->findAll();
     
    		$formCollection = $this->createForm(EntityACollectionType ::class, ['EntityACollection' => $entityAArray]);
     
    		$formCollection ->handleRequest($request);
    		if ($formCollection ->isSubmitted() && $formCollection ->isValid()) {
    			$submittedEntityAArray= $formCollection ->getData();
                            $em->persist($submittedEntityAArray);
                            [...]
    		}
     
    		return $this->render('myTemplate.html.twig', [
    			'form_collection' => $formCollection ->createView(),
    		]);
    	}
    Bonjour NoPr0n
    Dans Twig, comment tu fais le rendu de ton form. J'ai essayé un test avec ton schéma en utilisant exactement les mêmes noms d'entité mais j'ai plusieurs erreurs au moment du rendu du formulaire dans twig. Notamment Variable "easyadmin" does not exist.. Avec ceci en code d'erreur en ne comprenant pas ce que easyAdmin vient faire ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    in \vendor/easycorp/easyadmin-bundle/src/Resources/views/form/bootstrap_4.html.twig (line 264)
     
            </div>
        {%- endblock form_widget_compound -%}
        {% block empty_collection %}
            <div class="empty collection-empty">
                {{ include(easyadmin.entity.templates.label_empty) }}
            </div>
        {% endblock empty_collection %}
        {% block vich_file_row %}
            {% set force_error = true %}

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Points : 107
    Points
    107
    Par défaut
    Hhhm à vue de nez je dirais que tu as un Bundle qui change le comportement des formulaire et qui n'aime pas cette façon de générer des formulaires.
    Si tu ne t'en sers pas, tu peux le retirer, sinon essaye de regarder si tu as un "form_theme" de défini quelque part et que tu peux le retirer ?

    Plus d'info sur les forms_theme, je te laisse regarder :
    https://symfony.com/doc/current/form/form_themes.htm

    Tu peux peut-être créer un ticket sur le github de easyadmin-bundle (si tu es suffisamment a l'aise en anglais) parce que ça ressemble à un bug.


    Sinon, voici à quoi ressemble mon code :

    Code twig : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    								{{ form_start(form_collection) }}
    								{# iterate over each existing collection element #}
    								{% for EntityA in form_collection.EntityACollection%}
    									{% if not loop.first %}
    										<hr class="separator">
    									{% endif %}
    									<div class="row form-group">
    										<div class="col-12">
    											<div class="row  mb-2">
    												<div class="col-6">
    													{{ form_label(EntityA .property_a) }}
    												</div>
    												<div class="col-6">
    													{{ form_widget(EntityA .property_a, {'attr': {'class': 'form-control'}}) }}
    													{{ form_errors(EntityA .property_a) }}
    												</div>
    											</div>
    											<div class="row">
    												<div class="col-6">
    													{{ form_label(EntityA .property_b) }}
    												</div>
    												<div class="col-6">
    													{{ form_widget(EntityA .property_b, {'attr': {'class': 'form-control'}}) }}
    													{{ form_errors(EntityA .property_b) }}
    												</div>
    											</div>
    										</div>
    									</div>
    								{% endfor %}
     
    							</div>
    							<div class="col-12 text-center mb-2">{{ form_row(form_collection.Submit) }}</div>
    							{{ form_end(form_collection) }}

    Encore une fois, c'est non testé donc il y'a peut-être des typos

  13. #13
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut
    Merci pour ra réponse NoPr0n.

    Je vais tester ta solution et te dirais si ça marche. Par contre j'ai remarqué une chose, j'ai eu quelques soucis avec Easyadmin qui me faisait des bugs à l'affichage des collectionstype sur d'autres formulaires.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Variable "easyadmin" does not exist.
    . J'ai désinstallé le bundle et ça semble aller mieux. Je vais revenir sur cette partie pour voir ça car en attendant j'étais passé à un autre bundle pour avancer dans mon projet.

Discussions similaires

  1. [Débutant] Faire appel à un programme plusieurs fois dans une boucle for
    Par hibouchka dans le forum MATLAB
    Réponses: 9
    Dernier message: 01/03/2011, 17h09
  2. Réponses: 5
    Dernier message: 03/09/2007, 20h36
  3. Formulaire dans une boucle while
    Par starr dans le forum Langage
    Réponses: 3
    Dernier message: 09/01/2007, 08h27
  4. Réponses: 8
    Dernier message: 17/06/2006, 23h39
  5. Plusieurs formulaires dans une seule servlet
    Par bf83 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 27/03/2006, 15h21

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