URL: https://linuxfr.org/forums/programmationweb/posts/formulaire-et-bo%C3%AEte-modale Title: Formulaire et boîte modale. Authors: Gyro Gearllose Date: 2007年10月23日T11:25:09+02:00 Tags: Score: 0 Hello ! Voilà, je vais essayer de décrire ce que je veux faire, car d'une, ça va peut-être m'aider de fait pour parvenir à mes fins, et de deux, ça risque de vous éclairer pour pouvoir au moins m'aiguiller vers une ou des solutions. J'ai en ce moment une appli développée en php qui permet d'interagir avec une base de données postgres. L'application se présente sous la forme d'un menu généré à partir d'une arborescence créée sur le disque grâce à un script php, et lorsqu'on choisi un "écran", une page php idoine est incluse par la page index. Tout ceci fonctionne à merveille, mais j'aimerai rendre le tout un peu plus ergonomique. Voici ce qui risque d'être le plus difficile à décrire, alors je vais utiliser un exemple. J'ai un menu administration qui me permet d'agir sur différentes listes contenues dans ma base de données. Bien souvent, il s'agir de tables contenant un code et un libellé. Sur certains écrans, qui n'ont rien à voir avec ceux ci-dessus, j'utilise ces listes pour faciliter la saisie aux utilisateurs. Parfois, et c'est là le point crucial, il se trouve que lorsqu'on arrive à la dernière (ce n'est pas le seul cas possible, évidement, mais c'est le plus gênant), liste de l'écran, on s'aperçoit qu'il manque un élément dans la liste affichée. De là découlent deux solutions : - la pire : faire fi de toute la saisie pour choisir l'écran requis dans la zone d'administration, ajouter son élément à la liste en cause, et revenir au point de départ (en refaisant toute la saisie). - la moins pire : choisir n'importe quel élément de la liste incomplète, aller dans la zone d'administration qui va bien, ajouter son élément dans la liste, et revenir ensuite sur l'écran précédent pour corriger sa saisie... Évidement, aucune de ces deux solutions n'est satisfaisante. Ce que je voudrais donc, c'est mettre un peu d'interactivité dans tout ça, de façon à ce que l'utilisateur qui constate une erreur dans une liste puisse ouvrir une fenêtre modale sur cette liste, faire ce qu'il a à faire, et revienne ensuite à sont formulaire d'origine, qui doit récupérer les mises à jour des listes, sans perdre ce qui a été renseigné dans l'écran (pas de submit, donc). Je pense qu'il me faut donc utiliser un peu d'ajax pour afficher cette fenêtre modale, d'une parce que le window.open de javascript ne me satisfait pas (quand le navigateur ouvre tout dans de nouveaux onglets, ça fout le bronx), et de plus, la fenêtre ainsi ouverte est tout sauf modale. Par ailleurs, je pense que ré-ajuster le contenu d'un select sans recharger la page complète ne peut se faire qu'avec ajax (ou alors il me faudrait tout recoder). Je sais déjà ajouter un bouton qui déclenche une action javascript pour ouvrir une fenêtre. Comme je l'ai dit, ça ne me plaît pas. Je voudrais donc avoir un genre de div dans ma page dont le contenu puisse provenir de l'exécution d'un fichier php. J'ai évidement lorgné du côté de innerHTML, mais dans ce cas, ça ne s'applique pas. Je ne vois donc pas trop comment procéder. Ensuite, il faudrait que lorsque l'on quitte cette fenêtre modale, le contenu de la liste d'où provient l'appel soit mis à jour. Là encore, je ne sais pas trop comment procéder. J'ai regardé un peu les docs, tutoriels, etc. sur ajax, mais d'après ce que j'ai compris, il faut passer par un fichier xml pour les échanges entre le client et le serveur... ça ne me plaît pas de trop, d'autant que si j'ai tout mis dans une base de données, ce n'est pas pour me recoltiner le tout sous forme xml. Voilà, bien sûr, je continue mes investigations pour arriver à mes fins, mais si vous avez des pistes, liens pertinents sur le sujet, etc, je suis preneur. D'autant qu'il semble difficile dans ce cas de demander à google de chercher sur la toile avec les bons termes. Ajax+select+dynamique par exemple retourne tout un tas de choses qui ne s'appliquent pas à mon cas particulier. Merci d'avance de m'avoir lu et pour toute aide/lien que vous trouveriez utile de me communiquer.