Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Hello tout le monde,
je rencontre des difficultés pour l'utilisation de Zend_Captcha et plus particulièrement pour sa mise en forme:
voila ce que j'ai comme code dans mon controlleur:
$captcha = new Zend_Captcha_Figlet(array( 'name' => 'foo', 'wordLen' => 4, 'timeout' => 300 )); $elementCaptcha = new Zend_Form_Element_Captcha('test', array( 'label' => "Merci de vérifier que vous êtes un humain", 'captcha' => $captcha )); $this->view->captcha = $elementCaptcha;
dans ma vue je fais un simple affichage:
<?= $this->captcha; ?>
Cela me génère un code du type:
<dt><label for="test" class="required">Merci de vérifier que vous êtes un humain</label></dt> <dd> <pre> _____ __ __ _ __ ______ |__ // \ \\/ // | |/ // /_ _// / // \ ` // | ' // -| ||- / //__ | || | . \\ _| ||_ /_____|| |_|| |_|\_\\ /_____// `-----` `-`' `-` --` `-----` </pre> <input type="hidden" name="test[id]" value="3e558d001ea2da707333c70f23fd1dc6" helper="formText" id="test-id"> <input type="text" name="test[input]" id="test-input" value="" helper="formText"></dd>
#) comment puis je modifier l'input genre ajouter un attribut type class="maclasse" ?
#) est ce que je afficher le label plutot après l'input texte ?
#) est ce que je peux ajouté des éléments après l'input: ex ajouté une icone qui va me permettre de recharger le captcha ?
D'avance merci
PS: je précise que je ne suis habitué à utiliser Zend_form c'est peut être pour ça que je n'ai pas trouvé de solution.
Hors ligne
personne pour me donner un petit coup de main ??
Hors ligne
Bonjour bucheron,
J'ai absolument le même problème que toi...
j'ai créé mon formulaire en y ajoutant un décorateur perso:
// Contruction d'un Zend_Form parent::__construct($options); $this ->setName('users') ->setAction('') ->setMethod('post') ->clearDecorators() ->addDecorator('FormElements') ->addDecorator('Form') ->addElementPrefixPath('My_Decorator', 'My/Decorator/', 'decorator'); $username = new Zend_Form_Element_Text('username'); $username ->setLabel('Identifiant') ->setRequired(true) ->setAttrib('size', '15') ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty') ->addValidator('stringLength', false, array(6, 20)) ->setDecorators(array( array('Errors'), array('ViewHelper'), array('Label'), )); $captcha = new Zend_Form_Element_Captcha('captcha', array( 'label' => utf8_encode('Vérification anti robots'), 'captcha' => array( 'captcha' => 'Image', 'font' => '/images/captcha/arial.ttf', 'imgUrl' => '/prestas-web/public/images/captcha/', 'timeout' => 300, ), )); ->setRequired(true) ->setDecorators(array( array('Errors'), array('Label'), ));
Mon décorateur s'applique bien à mon Zend_Form_Element_Text mais pas à Zend_Form_Element_Captcha :S
Si vous avez une idée...
Voici ma class pour le décorateur:
class My_Decorator_Label extends Zend_Form_Decorator_Abstract { protected $_placement = 'PREPEND'; public function render($content) { if (null === ($element = $this->getElement())) { return $content; } if (!method_exists($element, 'getLabel')) { return $content; } $label = $element->getLabel(); $required = $element->isRequired(); if ($element->isRequired()) { $label .= ' '; } if (null === ($view = $element->getView())) { return $this->renderLabel($content, $label, $required); } $label = $view->formLabel($element->getName(), $label); return $this->renderLabel($content, $label, $required); } public function renderLabel($content, $label, $required) { $placement = $this->getPlacement(); $separator = $this->getSeparator(); switch ($placement) { case 'APPEND': return $content . $separator . '<div class="label">' . $label . (($required == true) ? '<span class="red"> *</span>' : '') . '</div>'; case 'PREPEND': default: return '<div class="label">' . $label . (($required == true) ? '<span class="red"> *</span>' : '') . '</div>' . $separator . '<div class="input">' . $content . '</div>'; } } }
Bonne journée,
Christophe.
Hors ligne