9
votes

Personnaliser la sortie Zend_Form CAPTCHA?

J'utilise captcha dans mon Zend_Form. xxx

Ceci génère: xxx

Toutefois. - J'ai besoin de suivre à la place (les éléments CAPTCHA sont enveloppés dans certaines tags individuellement): xxx

Je ne peux pas comprendre comment ferais-je cela. Puis-je y accomplir en utilisant des décorateurs personnalisés? ou Woud qui impliquent Captcha personnalisé?


1 commentaires

Ce n'est pas une tâche banale. Par exemple, vous modifiez l'ordre des champs dans l'élément de formulaire CAPTCHA. Cette commande est codée dur. Ainsi, pour simplement changer, vous devez modifier zend_form_element_captcha ou créer votre propre version de zend_form_element_captcha.


3 Réponses :


10
votes

C'était un peu délicat, mais j'ai préparé un élément de captcha personnalisé. J'ai aussi besoin de préparer le décorateur Captcha personnalisé. Dans les deux cas, je devais remplacer les méthodes de rendu par défaut dans les deux zend_form_element_captcha code> et zend_form_decorator_captcha code>. J'ai aussi éliminé zend_form_decorator_captcha_word code> car j'ai incorporé sa fonctionnalité directement dans my_form_decorator_captcha code>. Il y avait deux raisons à cela. Le premier est que l'ordre des éléments de formulaire a été modifié, c'est-à-dire de par défaut img, entrée masqué, texte d'entrée em> dans le texte d'entrée , img, entrée masquée em>. La deuxième raison est que les étiquettes DIV et SPAN devaient être ajoutées.

Espérons-le, ils seront utiles: p>

my_form_element_captcha strud>: p>

class My_Form_Decorator_Captcha extends Zend_Form_Decorator_Captcha {

     public function render($content) {
        $element = $this->getElement();
        if (!method_exists($element, 'getCaptcha')) {
            return $content;
        }

        $view = $element->getView();
        if (null === $view) {
            return $content;
        }


        $name = $element->getFullyQualifiedName();

        $hiddenName = $name . '[id]';
        $textName = $name . '[input]';

        $label = $element->getDecorator("Label");
        if ($label) {
            $label->setOption("id", $element->getId() . "-input");
        }

        $placement = $this->getPlacement();
        $separator = $this->getSeparator();

        $captcha = $element->getCaptcha();
        $markup = $captcha->render($view, $element);
        $hidden = $view->formHidden($hiddenName, $element->getValue(), $element->getAttribs());
        $text = $view->formText($textName, '', $element->getAttribs());


        // CHANGE THE ORDER OF ELEMENTS AND ADD THE div AND span TAGS.

        switch ($placement) {
            case 'PREPEND':
                $content = '<div><span>' . $text . '</div></span>' .
                        '<div><span>' . $markup . $hidden . '</div></span>' .
                        $separator . $content;
                break;
            case 'APPEND':
            default:
                $content = $content . $separator .
                        '<div><span>' . $text . '</div></span>' .
                        '<div><span>' . $markup . $hidden . '</div></span>';
        }

        return $content;
    }

}


4 commentaires

OMG Marcin - Tu es mon héros. Je viens de suivre le même code essayant de déterminer comment accomplir cela. Merci un tas.


@Andre. Je suis heureux que tu aimes ça.


Marcin j'utilise captcha sans Zend_form. J'utilise le code CAPTCHA directement dans Controller, comment je change Voir html


Marcin, comment nous appelons le fichier PHTML ce rendu personnalisé



3
votes

J'utilise simplement xxx

et inside vuescript: xxx


0 commentaires

1
votes

réponse; CAPTCHA, soumettre et autres éléments de texte pour bootstrap 3 Syntaxe

bonne chance xxx


1 commentaires

Vous devriez probablement ajouter une explication.