2

我正在使用以下方法创建这样的验证码Zend_Form

class Form_Signup extends Zend_Form {

    public function __construct( array $options = null ) {

        // set method
        $this->setMethod('post');

        // other elements here        

        // captcha 
        $captcha = new Zend_Form_Element_Captcha('captcha', array(
                'id'=>'captcha',
                'title'=>'Security Check.',
                'captcha' => array(
                'captcha' => 'Image',
                'required' => true,
                'font'=> 'fonts/ARIALN.TTF',
                'wordlen'=>'4',
                'width'=>'200',
                'height'=>'50',
                'ImgAlign'=>'left',
                'DotNoiseLevel'=>'30',
                'LineNoiseLevel'=>'7', 
                'Expiration'=>'1000',
                'fontsize'=>'30',
                'gcFreq'=>'10',
                'imgdir'=> 'images/captcha/',
                'ImgAlt'=>'Captcha',
                'imgurl'=>'/images/captcha/'
                )));
        $captcha->removeDecorator('HtmlTag')
        ->removeDecorator('Label')
        ->addDecorator('Label');        

        // add captcha
        $this->addElement( $captcha );          
        $this->setDecorators( array( array( 'ViewScript', array( 'viewScript' => 'signup/signup-form.phtml' ) ) ) );    
    } 

}

它正在生成这样的 HTML:

<img width="200" height="50" alt="Captcha" src="/images/captcha/cabf4d4d759ae8e4b7404b95e032e231.png">
<input type="hidden" name="captcha[id]" value="cabf4d4d759ae8e4b7404b95e032e231" title="Security Check." id="captcha">
<input type="text" name="captcha[input]" id="captcha" value="" title="Security Check.">

但我想要像这样的图像下方的验证码文本框:

<img width="200" height="50" alt="Captcha" src="/images/captcha/cabf4d4d759ae8e4b7404b95e032e231.png">
<br />
<input type="hidden" name="captcha[id]" value="cabf4d4d759ae8e4b7404b95e032e231" title="Security Check." id="captcha">
<input type="text" name="captcha[input]" id="captcha" value="" title="Security Check.">

任何想法 ?

谢谢

4

1 回答 1

1

Zend Captcha 元素装饰器并不复杂。解决这个问题的最佳方法是创建我们自己的装饰器。一旦你完成它。您可以根据需要更改顺序

你可以在这里找到完整的答案

如果你不着急,并且如果你有足够的时间,那么请阅读 Methew 的这篇文章,解释如何使用装饰器。

几乎与我在这里提出的相同问题,我不想创建一个单独的装饰器类,但没有得到任何正确的答案。然后我做了一些css技巧并被迫<input type='text'>下去。所以唯一的解决方案是生成自定义验证码装饰器类。

如果你在那里没有得到任何东西,请告诉我。谢谢

于 2012-07-24T14:13:20.423 回答