Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai un formulaire standard avec des éléments, décorateurs. Je souhaiterai afficher du HTML pure (contenant des boutons, input, label) à la fin de mon formulaire. Grosso modo, il me faudrait un élément qui affiche du html sans effectuer aucun traitement dessus, et qui le place à une position donné (à priori dans ce cas précis, ça doit-être à la fin).
Du coup, si vous ne voyez pas de meilleure solution, je vais créer un élément qui prend du html et qui affiche du html sans aucun traitement (wouaaaa ).
[EDIT]
Je voudrais mettre mon html ici
<form> <table> ..... ..... </table> --> ICI <-- </form>
[/EDIT]
Merci
PS: je n'ai pas le temps de faire ça proprement, c'est à dire passer le html dans un formulaire approprié, car en plus, je dois créer les éléments en dynamique !!!! Solution laparesse!
Dernière modification par whitespirit (16-06-2008 09:26:01)
Hors ligne
En Bidouillant les éléments et les décorateurs, ça devrait se faire facilement:
Le principe à suivre c'est de créer un éléments quelconque et d'enlever le décorateur ViewHelper qui gère l'affichage de input, select,... pour ne laisser qu'un élement HtmlTag de ton choix pour afficher par exemple le champ Description ou Label. C'est de la bidouille ça
Sinon tu peux créer un Zend_Form_Element_Blabla de ton choix en l'ajoutant à ton form. C'est une solution peut être plus élégante, mais peut être aussi un peu plus longue à implémenter (peut être ).
Hors ligne
Ca va être plus compliqué que prévu, j'avais oublié que je créé de cette façon la form :
$this->setDecorators(array('FormElements', array('HtmlTag', array('tag' => 'table', 'class'=>'form_tab', 'cellpadding'=>"0", 'cellspacing'=>"1")), 'Form'));
Du coup le code ajouté <form...><table>....</table></form> est lié à cette ligne... Ben je crois que je serai obligé de chercher la solution vers de nouveaux Zend_Form_Element et blablabla... Pas motivé !!!
Dernière modification par whitespirit (14-06-2008 18:11:35)
Hors ligne
En fait, je ne m'en sors pas... Je ne trouve pas de solutions. Le problème est que le décorateur du formulaire à pour but d'encadrer la <form> </form> par <form> <table> ... </table> </form>. Hors, le principe du décorateur est d'envelopper un élément alors que ce que je souhaite c'est d'ajouter un élément à la suite de <table>.
Peut-être qu'une solution simple existe et que je m'embrouille ?
Hors ligne
A quoi ca va te servir?
As tu vraiment besoin d'ajouter du contenu obligatoirement dans le form alors que ce n'est pas pour de la récupération d'informations (input, select, etc...) ?
- C'est une histoire de mise en forme? Tu ne pourrais pas coller tout simplement un tableau au dessus et arranger la mise en forme via les css?
- C'est pour du javascript?
Hors ligne
En fait, je me suis fait des formulaires génériques et une table Mysql est associé à un formulaire. Dans certains cas, je dois regrouper deux tables dans un formulaire comme c'est le cas pour une table facture et facture_ligne. Donc pour ce cas, j'affiche le formulaire générique et le formulaire pour facture_ligne. Tout doit-être dans la même form car lorsque je créer une nouvelle facture, je créé en même temps les facture_ligne => donc dans le même post et pour la même actionController.
C'est le pb de vouloir faire du générique, pour les cas particulier ça coince.
Hors ligne
je me permet d'intervenir, je pense que le problème se pose également lorsque l'on veut rajouter un éditeur de texte sur un champ texte d'un formulaire. Comment rajouter cette barre de mise en page tel que tinyMCE ?
Hors ligne
Je suis d'accord mais c'est plus une question de mise en page.
On construit le formulaire avec Zend_Form, on l'affiche ensuite dans la vue en fesant par exemple:
<?php echo $this->form ; ?>
Comment faire pour rajouter une barre d'outils en plein milieu du formulaire?
On peut également se poser la question si l'on veut insérer des commentaires ou des aides à l'utilisateur pour qu'il remplisse correctement le formulaire.
Dernière modification par slaughter (16-06-2008 01:09:29)
Hors ligne
Bon, j'ai résolu mon problème après une longue méditation ce week. La solution va vous paraitre stupide mais dans mon cas elle fonctionne. D'ailleurs j'ai honte quelle fonctionne car, c'est vraiment nul!
J'ai créer un élément eltHTML et un décorateur que j'ai nommé HtmlDisplay ! En gros j'écris mon html dans le label (via un setLabel) d'un élément et le décorateur ne récupère que ce Label et fait un magnifique et majestueux
class Formulaires_Decorators_HtmlDisplay extends Zend_Form_Decorator_Abstract { public function render($content) { $element = $this->getElement(); if (!$element instanceof Zend_Form_Element) { return $content; } if (null === $element->getView()) { return $content; } $label = $element->getLabel(); return eval($label); } }
Vous remarquerez que la fonction eval($label) va prendre tout le html/javascript/php contenu dans $label et l'exécuter! Plus moche que ça, faut le faire non ? Quoi que.... Ca pourra t'aider Slaughter pour ajouter du javascript! J'avais honte de le dire, mais c'est comme ça que je procède jusqu'à présent!
Dernière modification par whitespirit (16-06-2008 09:27:10)
Hors ligne
Tout comme les CSS, du code Javascript ne devrait pas être perdu au milieu d'HTML.
Si la notion de programmation non intruisive ne vous dit rien, je vous conseille de lire cette article et les 4 autres qui le suivent: http://www.pompage.net/pompe/javascript … hapitre-1/
Hors ligne
Je pense également que le code CSS et JS doit être bien séparé du reste du code de la page.
Personnelement, mon problème se situe simplement dan l'ajout du menu (donc du HTML) dans le formulaire créé par le Zend_form. Cependant, d'après ce que j'ai compris du dernier post de Whitespirit, cela doit être possible par la création d'un nouveau décorateur. Je n'y connait rien du tout de ce coté là. Je vais y jeter un coup d'oeil.
Hors ligne
Voilà ce que j'en pense:
Ton menu ne sera utilisable uniquement via Javascript, donc si le javascript n'est pas activé, ton menu ne sert à rien.
Conclusion: rajouter le menu en le générant via Javascript!
Tout ce qui su'utilise uniquement via Javascript se doit d'être "inséré" via Javascript.
Hors ligne
Juste pour préciser, je ne mélange pas le JS dans le HTML, mais je construit dynamiquement certains formulaires en php (du coup, je suis obligé de faire un eval). Par contre, je mélange du javascript pour avoir un calendrier dans mes dates (j'utilise JSCalendar et après chaque input text je dois écrire un petit script js pour paramétrer le calendrier. Voilà, la solution que j'ai trouvé!
Pour ton histoire de menu, je me sers de mon élément HTML pour mélanger des formulaires Zend_Form et du html (aussi des input pour mon formulaire). Je n'ai pas le temps de créer toutes mes routines pour passer par zend_form et si je dois faire des forms plus compliquer, zend_form devient trop complexe.
Bref, tous les chemins mènent au rhum !
Hors ligne
Pages: 1