I'm also attempting a custom decorator for captcha elements and found this thread. When finally rendered, I would like to have this:
<div id="custom_id" class="custom_class"> <label id="custom_id_label" for="custom_id_text" class="custom_class_label"><!-- label text --></label> <p id="custom_id_description" class="custom_class_description"><!-- description text --></p> <ul id="custom_id_errors" class="custom_class_errors"><!-- any error messages --></ul> <pre id="custom_id_captcha" class="custom_class_captcha"><!-- captcha challenge --></pre> <input type="hidden" name="captcha[id]" value="{captcha key}" id="custom_id_key" /> <input type="text" name="captcha[text]" value="" id="custom_id_text" class="custom_class_text" /> </div> I've been able to accomplish this with other form elements, but I'm having difficulty with the captcha rendering (probably due to the Captcha_Word class?). I either get two captchas, one rendered before the div, or the additional hidden & text inputs are rendered after the div. Could I have some help in understanding how to store the captcha elements in a variable as text before the actual rendering of them? For instance, when I use: $captcha = $element->getCaptcha()->render($view, $element); all of the captcha elements are rendered before the div and then just the <pre>challenge</pre> is rendered inside the div. Also, some direction about defining the custom id & class attributes for the elements as described above would be much appreciated. TIA! Matthew Weier O'Phinney-3 wrote: > > -- Matthew Lurz <mlur...@gmail.com> wrote > (on Sunday, 31 August 2008, 04:42 AM -0700): >> >> I'm having some difficulty understanding how to implement a custom >> decorator >> for a Captcha element. The manual states: >> >> "The decorator used is determined by querying the captcha adapter. By >> default, the Captcha decorator is used, but an adapter may specify a >> different one via its getDecorator() method." >> >> Since all forms and elements in the application I'm working with require >> custom markup I call loadDefaultDecorators in the custom form and element >> classes. Unfortunately this doesn't seem to work with the Captcha >> element. I >> can understand why this wouldn't work to some extent but don't understand >> how to correctly implement a custom decorator. In a nutshell, I simply >> need >> to remove the DtDd wrapper with and HtmlTag. > > The default decorators for Captcha elements are: > > * Errors > * HtmlTag (dd) > * Label (with dt tag) > > When render() occurs, it shifts on the captcha decorator to the top of > the stack. So, simply call setDecorators as usual, but without a > ViewHelper decorator, and you'll be all set. > > -- > Matthew Weier O'Phinney > Software Architect | matt...@zend.com > Zend Framework | http://framework.zend.com/ > > -- View this message in context: http://www.nabble.com/Zend_Form_Element_Captcha-%2B-Custom-Decorator-tp19241501p24466277.html Sent from the Zend Framework mailing list archive at Nabble.com.