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

Bibliothèques & Frameworks Discussion :

Form réparti dans plusieurs ContentPane et Bordercontainer [Dojo]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut Form réparti dans plusieurs ContentPane et Bordercontainer
    Bonjour,

    Mon problème actuel est le suivant : je suis très doué pour me mettre dans des configurations impossibles ! Plus techniquement, voici de quoi il s'agit : j'abuse peut-être un peu trop des gadgets de mise en forme Dojo (mais ils sont là pour ça hein !? )...

    Sur une seule page, j'ai un BorderContainer et (notamment) 3 ContentPane (center, et right qui en contient lui-même 2 -> 1 + (1+1) = 3).

    J'ai un formulaire dans le Center, 1 dans le Right-Center et 1 dans le Right-Bottom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    BorderContainer
     
    -- ContentPane Center I
    -- -- DijitForm A avec son Button Submit
     
    -- BorderContainer Right II
     
    -- -- ContentPane Center III
    -- -- -- Form B
     
    -- -- ContentPane Bottom IV
    -- -- -- Form C
    Si je mets mon button submit dans le Center, je reçois en POST uniquement le contenu du Center, si je le mets dans Right-Center je reçois uniquement le contenu du Right-Center, etc etc...

    Normal, mais je dois trouver une solution pour TOUT récupérer.

    J'ai essayé de ne mettre qu'un seul formulaire (un seul id), réparti dans plusieurs BorderContainer et ContentPane :

    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
    <div début de formulaire>
    
    BorderContainer
    
    -- ContentPane Center I
    -- -- Champs de Form
    -- -- Button submit
    
    -- BorderContainer Right II
    
    -- -- ContentPane Center III
    -- -- -- Champs de Form
    
    -- -- ContentPane Bottom IV
    -- -- -- Champs de form
    
    <div fin de tous les BorderContainer et autres ContentPane>
    
    <div fin de formulaire>
    Ca ne marche pas : Dojo n'affiche que le contenu du premier Center, et encore, sans mise en forme.

    Mon idée donc serait de mettre dans le ContentPane I suffisamment de <input hidden> qui prendraient une valeur à chaque OnChange dans les Form B et Form C. Genre : OnChange de RadioList dans Form B, mettre la nouvelle valeur dans le <input hidden> correspondant dans le Form A.

    Ainsi quand je fais le submit, je récupère tout, puisque les valeurs ont été transmises dans les <hidden>. D'où ma question : comment écrire la fonction qui va aller mettre à jour les champs <hidden> dans le ContentPane I ??

    [PS]J'imagine qu'on pourrait écrire à la place une fonction JS au moment du POST qui irait chercher les valeurs partout sur la page et qui les rajouterait dans le contenu du POST, mais ça me motive moins comme solution...[/PS]

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Tu as à ta disposition dojo.formToObject(formNode) et/ou dojo.formToJson(formNode) qui permettent d'obtenir simplement les données de tes formulaires.

    Et si tu as créé un dijit Form, alors tu peux aussi appeler sa méthode getValues() qui renvoie une structure Json des valeurs (en fait l'équivalent de dojo.formToJson).

    Pour n'en faire qu'un seul objet, et si les noms des champs sont différents:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var bigFormObject =  dojo.mixin(dojo.formToObject(frm1), dojo.formToObject(frm2), dojo.formToObject(frm3));
    Ensuite y'a plus qu'à poster cet objet (tu peux le serialiser par exemple ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     var data= dojo.toJson(bigFormObject );
    Par contre si tu as un champ de type input type="file", alors là c'est foutu !

    Bon dev,

    ERE

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Bonjour,
    Et bon retour de vacances pour ceux qui en reviennent !

    Emmanuel, je n'ai pas utilisé ta solution et j'ai fait ça, qui va peut-être sembler de la bidouille, mais ça marche donc je le présente quand même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    BorderContainer
     
    -- ContentPane Center I
    -- -- DijitForm A avec son Button Submit j'ai rajouté un champ Hidden qui s'appelle commid (pour l'exemple)
     
    -- BorderContainer Right II
     
    -- -- ContentPane Center III
    -- -- -- pas de form, mais des champs de formulaire (boutons radio en l'occurence). sur chaque, le OnChange appelle une fonction ToggleThis que je vais détailler après
     
    -- -- ContentPane Bottom IV
    -- -- -- idem qu'au dessus
    La fonction ToggleThis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	function togglecommid(id){
    		dijit.byId("commid").attr("value", id.value);
    Et voilà : quand je Submit mon formulaire, le champ Commid vient avec, et mon code PHP peut l'interpréter et prendre en compte ce qui avait été choisi dans les colonnes de droite...

    A bientôt pour de prochaines questions

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Langage/Algorithme] Interface dont l'implémentation est réparti dans plusieurs classes
    Par ShaiLeTroll dans le forum C++Builder
    Réponses: 9
    Dernier message: 31/05/2011, 11h40
  2. [Dojo] ajout d'un form.Select dans un contentPane
    Par okilele dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 31/08/2010, 21h12
  3. Utiliser form modal dans plusieurs form
    Par sondo dans le forum Langage
    Réponses: 2
    Dernier message: 11/11/2008, 17h25
  4. [CR XI] Mettre en forme dans plusieurs colonnes dans section pied de groupe
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 05/11/2007, 09h27
  5. Comment mettre le même TMainMenu dans plusieurs Form ?
    Par gmc dans le forum Composants VCL
    Réponses: 6
    Dernier message: 12/08/2004, 21h03

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