Frage

I have a application and I use themes to manage different styles and layouts. In the default generated contact.php I use the following code to generate a captcha verification for the form:

    //webroot/themes/botany/views/site/contact.php
    <?php //echo $form->labelEx($model,'verifyCode'); ?>
            <div>
            <?php $this->widget('CCaptcha', array('showRefreshButton' => true,
'buttonLabel' => 'Refresh', 
'buttonOptions' => '', 
'buttonType' => 'button',
 'clickableImage' => true)); 
?>
            <?php echo $form->textField($model,'verifyCode', array('class' => 'form-control', 'placeholder' => 'Captcha*')); ?>
            </div>
            <p>Please enter the letters as they are shown in the image above.
            <br/>Letters are not case-sensitive.</p>
            <?php echo $form->error($model,'verifyCode'); ?>

        <?php endif; ?>

Although, I have set showRefreshButton => true I could not able to see the refresh button. The following screen shot demonstrates the absence of refresh button:

enter image description here

War es hilfreich?

Lösung

After some inspection, I found, what I think, a bug in Yii, in which, different widgets generate HTML elements with the same id.

In my case zii.widgets.CMenu widgets in webroot/themes/botany/views/layouts/main.php generates the same id for the ul of the navigation menu and the Captcha widget image regarded id by the generated jquery by the captcha widget.

I could able to solve this issue by supplying the id option of CMenu

<?php $this->widget('zii.widgets.CMenu',array(
                                    'id' => 'gds',
            'htmlOptions' => array('class' => 'nav'),
            'items'=>array(
                array('label'=>'Home', 'url'=>array('/site/index')),
                array('label'=>'About', 'url'=>array('/site/page', 'view'=>'about')),
                array('label'=>'Contact', 'url'=>array('/site/contact')),
                array('label'=>'Login', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
                array('label'=>'Logout ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)
            ),

        )); ?>

and setting yw0 id for the captcha image.

<?php $this->widget('CCaptcha', array('imageOptions' => array('id' => 'yw0'),'showRefreshButton' => true,'buttonLabel' => 'Refresh', 'buttonOptions' => '', 'buttonType' => 'button')); ?>

Andere Tipps

What type of render function did you use? If you are using renderPartial, it won't show the refresh button. The easy way is create a new blank layout and use render() http://www.dukaweb.net/2013/12/why-does-yii-captcha-not-display-get.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top