Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je souhaiterai savoir comment ajouter une balise HTML à coté d'un élément du formulaire ?
$user = new Zend_Form_Element_Text('user'); $user->setLabel('User') ->setValue("Toto") ->setRequired(true) ->setOptions(array("readOnly"=>true)) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty'); $max_carac = 140; $content = new Zend_Form_Element_TextArea('description'); $content->setLabel('Content') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty') ->addValidator('stringLength', false, array(1, $max_carac)); // ajouter une balise HTML simple (<dd> ou <div>) $submit = new Zend_Form_Element_Submit('submit'); $submit->setLabel('OK'); $this->addElements(array($user, $content, $submit));
Je voudrais soit rajouter une balise HTML <dd> ou un <div> à coté de ma textarea, comment faire ceci ?
Dernière modification par Aure77 (06-04-2010 14:11:16)
Hors ligne
Bonjour, on en parle dans le poste à côté (Retour d'expérience).
Hors ligne
J'ai essayé avec :
<?php class Ma_Form_Element_Code extends Zend_Form_Element_Xhtml { /** * Default form view helper to use for rendering * @var string */ public $helper = 'formCode'; }
et
$code = new Ma_Form_Element_Code("code") ; $code->setValue('<p>Ceci est du code HTML</p>'); $code->addDecorators(array( 'ViewHelper', array('HtmlTag', array('tag' => 'dd')) ));
Mais lorsque j'affiche j'ai vraiment plus rien du tout...(plus de formulaire)
Hors ligne
Ca peut venir d'un mauvais chemin, le fichier doit être dans Code.php, dans le répertoire library/Ma/Form/Element
En outre il faut avoir library dans le fichier include et dans certaines configurations il faut déclarer Ma_ dans application.ini.
autoloadernamespaces[] = "Ma_" includePaths.library = APPLICATION_PATH "/../library"
Et bien entendu ne pas oublier d'ajouter l'élément dans la form.
$this->addElements(array($user, $content, $code, $submit));
Dernière modification par Zartan (06-04-2010 20:14:16)
Hors ligne
library/Ma/Form/Element ??? J'ai rien qui s'appelle comme ça dans mon répertoire de Zend !
Hors ligne
Aure77 a écrit:
library/Ma/Form/Element ??? J'ai rien qui s'appelle comme ça dans mon répertoire de Zend !
On parle de TON library, pas celui de Zend
Hors ligne
Oui mais je met quoi moi, dans ma library (Ma/Form/...) ?
Il y a pas un moyen plus simple pour ajouter 2 pauvres balises HTML ?
Dernière modification par Aure77 (07-04-2010 10:13:52)
Hors ligne
Il faut aller dans le répertoire library, créer le répertoire Ma, dans le répertoire Ma créer le répertoire Form, dans le répertoire Form créer le répertoire Element et dans le répertoire Element ajouter Code.php qui contient :
<?php class Ma_Form_Element_Code extends Zend_Form_Element_Xhtml { /** * Default form view helper to use for rendering * @var string */ public $helper = 'formCode'; }
Ca ira ou il faut vous expliquer comment créer un répertoire ?
Hors ligne
Ok je n'avais pas compris que Ma_Form_Element_Code représentait l'arborescence des fichiers...
Mais ça ne change rien, toujours le même problème...
J'ai essayé : Zend_Loader::loadClass("Ma_Form_Element_Code"); mais ça ne marche pas !
(la configuration n'est pas faite dans le ini mais dans index.php (set_include_path & Zend_Loader::registerAutoload()), il n'utilise pas les Zend_Application/bootstrap...)
Hors ligne
registerAutoload c'est abandonné depuis la version 1.8!
Il faut faire comme cela désormais :
require_once 'Zend/Loader/Autoloader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->setFallbackAutoloader(true);
Il faudrait essayer :
require_once 'Ma/Form/Element/Code.php' ;
avant de charger la classe.
Hors ligne
J'ai une version antérieur à la 1.8 et Zend/Loader/Autoloader.php n'existe pas...
Hors ligne
Je pense qu'une mise à jour serait utile. Ca nous permettrait de discuter sur les mêmes bases.
Hors ligne
Je viens de faire un test et ma classe est bien loadé !
Quand je fait : echo $code->getValue(); -> il m'affiche bien mon code HTML
et
get_class_methods(Ma_Form_Element_Code) m'affiche bien les méthodes des Zend_Form...
mais j'ai l'impression que c'est le render qui pause problème !
car si je fait $code->render(); -> Zend soulève une exception...
(Uncaught exception 'Zend_Form_Exception' with message 'Invalid type "ELEMENT" provided to getPluginLoader()' in C:\xampp\htdocs\library\Zend\Form\Element.php:1013 .... Zend_Form_Element->addPrefixPath('Ma_Form_Element', 'Ma/Form/Element...', 'element'))
element n'existe pas (seul VALIDATE/DECORATOR/FILTER sont possible)
Non je ne peux pas mettre à jour ma version de Zend car mon programme est déjà bien avancé et en production.
Dernière modification par Aure77 (07-04-2010 13:08:39)
Hors ligne
Remplacez
public $helper = 'formCode';
par
public $helper = 'formNote';
Hors ligne
OK c'était bien ça le problème ! merci
Hors ligne
Comment est t'il possible de faire ça :
...
<tr>
<td><textarea></textarea></td>
<td><ul><li>TOTO</li></ul></td>
</tr>
...
Afin de mettre cote à cote ma textarea et mon élément <ul>
Car la j'ai :
...
<dd>
<textarea ...></teaxtarea>
</dd>
<dt> </dt>
<dd><ul><li>TOTO</li></ul></dd>
...
Dernière modification par Aure77 (07-04-2010 14:27:51)
Hors ligne
Là c'est un problème de decorators.
$ele1->setDecorators(array(
'ViewHelper',
array(array('data'=>'HtmlTag'), array('tag' => 'td')),
array(array('row'=>'HtmlTag'),array('tag'=>'tr','openOnly'=>true))
));
et
$ele2->setDecorators(array(
'ViewHelper',
array(array('data'=>'HtmlTag'), array('tag' => 'td')),
array(array('row'=>'HtmlTag'),array('tag'=>'tr','closeOnly'=>true))
));
Quelque chose dans ce genre là...
Hors ligne
Merci bien, je ne connaissais pas openOnly/closeOnly.
Tant que j'ai quelqu'un qui s'y connais sous la main :
La textarea possède un label et je voudrai qu'il soit au dessus de la textarea et de ma liste ul
J'ai ajouté
array('Label' , array('tag' => 'td') ),
Mais je vois pas comment faire pour qu'il fasse :
<tr><td><label class="required">Content</label></td></tr>
<tr>
<td><textarea></textarea></td>
<td><ul><li>TOTO</li></ul></td>
</tr>
car il me fait :
<tr>
<td><label class="required">Content</label></td>
<td><textarea></textarea></td>
<td><ul><li>TOTO</li></ul></td>
</tr>
ou que le label et la form soit dans le même TD
Dernière modification par Aure77 (07-04-2010 15:23:16)
Hors ligne
Ca j'ai jamais fait, je suppose qu'il faut commencer par essayer :
array('Label' , array('tag' => 'td', 'openOnly'=>true) ),
array(array('data'=>'HtmlTag'), array('tag' => 'td', 'closeOnly' =>true)),
array(array('row'=>'HtmlTag'),array('tag'=>'tr'))
Hors ligne
Ne marche pas, la textarea se retrouve hors de la <table> ...
Hors ligne
Je n'ai pas le temps de chercher ça désolé.
Hors ligne
Personne d'autre ne peux m'aider alors ?
EDIT: Finalement je m'en suis sortie grace à ce tuto : http://www.dator.fr/tutorial-creer-une- … tchmydesk/
Dernière modification par Aure77 (08-04-2010 16:05:42)
Hors ligne
Pages: 1