2011-04-21 17 views
12

मैं अपने php पेज में एक ज़ेंड कैप्चा लागू करता हूं अब मुझे कैप्चा रीलोड बटन जोड़ने की आवश्यकता है। ज़ेंड के अनुसार उत्तर दें।क्लिक रीफ्रेश बटन पर ज़ेंड कैप्चा छवि को फिर से लोड कैसे करें?

+0

प्रयोग कर रहे हैं मान यह Zend_Captcha के डिफ़ॉल्ट व्यवहार है। क्या आप अपनी समस्या का वर्णन करने के लिए कुछ उदाहरण कोड प्रदान कर सकते हैं? – leek

उत्तर

17

बस दो त्वरित स्निपेट लेकिन मुझे लगता है कि आपको यह विचार मिल जाएगा। अपनी जरूरतों के लिए तत्व का नाम और चयनकर्ता समायोजित करें।

अपने नियंत्रक में एक विधि जोड़ने

document.addEvent('domready', function() { 
    $$('#contactForm img').addEvent('click', function() { 
     var jsonRequest = new Request.JSON({ 
      url: "<?= $this->url(array('controller' => 'contact', 'action' => 'refresh'), 'default', false) ?>", 
      onSuccess: function(captcha) { 
       $('captcha-id').set('value', captcha.id); 
       $$('#contactForm img').set('src', captcha.src); 
      } 
     }).get(); 
    }); 
}); 

संपादित एक ताजा कैप्चा

public function refreshAction() 
{ 
    $form = new Form_Contact(); 
    $captcha = $form->getElement('captcha')->getCaptcha(); 

    $data = array(); 

    $data['id'] = $captcha->generate(); 
    $data['src'] = $captcha->getImgUrl() . 
        $captcha->getId() . 
        $captcha->getSuffix(); 

    $this->_helper->json($data); 
} 

आपके विचार स्क्रिप्ट में उत्पन्न करने के लिए (मैं ajax-अनुरोध के लिए mootools उपयोग कर रहा हूँ): जोड़ा गया Pahan के jQuery

$(document).ready(function() { 
    $('#refreshcaptcha').click(function() { 
     $.ajax({ 
      url: '/contact/refresh', 
      dataType:'json', 
      success: function(data) { 
       $('#contactForm img').attr('src', data.src); 
       $('#captcha-id').attr('value', data.id); 
      } 
     }); 
    }); 
}); 
+2

कोड के लिए धन्यवाद, आकर्षण की तरह काम करता है :) इसे पढ़ने के बाद मैंने jquery का उपयोग किया। '$ (दस्तावेज़) .ready (function() {$ ('# refreshcaptcha')। क्लिक करें (फ़ंक्शन() {$ .ajax ({url: '/ contact/refresh', डेटा टाइप: 'जेसन', सफलता: फ़ंक्शन (डेटा) {console.log (डेटा) $ ('# contactForm img')। attr ('src', data.src); $ ('# कैप्चा-आईडी')। attr ('value', data.id); }});});}); ' – pahan

+1

@pahan आपका स्वागत है। मैंने बाद में संदर्भ के लिए आपके उत्तर में अपनी jquery स्क्रिप्ट जोड़ा। धन्यवाद। –

+0

हाय, मुझे एक ही समस्या का सामना करना पड़ रहा है, मुझे पता है कि आपका रिफ्रेश कैप्चाचा क्या तत्व है, मेरा आईएमजी है लेकिन मैं काम नहीं करूँगा? – user236501

1

@Benjamin क्रेमर कोड के लिए धन्यवाद, की तरह काम करता आकर्षण इस पढ़ने के बाद मैंने jquery का उपयोग किया।

$(document).ready(function() { 
    $('#refreshcaptcha').click(function() { 
     $.ajax({ 
      url: '/contact/refresh', 
      dataType:'json', 
      success: function(data) { 
       $('#contactForm img').attr('src',data.src); 
       $('#captcha-id').attr('value',data.id); 
      } 
     }); 
    }); 
}); 
2

@ user236501 वास्तव में यह (उदाहरण के बटन के लिए) Zend फ़ॉर्म एलीमेंट किसी भी प्रकार का हो सकता है।

 $this->getElement('captcha')->getDecorator('Description')->setOptions(array(
      'escape'  => false, 
      'style'   => 'cursor: pointer; color: #ED1C24', 
      'tag'   => 'div' 
     )); 

यह किया जा सकता है: उदाहरण के लिए

 $captcha = new Zend_Form_Element_Captcha('captcha', array(
      'label' => 'Some text...', 
      'captcha' => array(
       'captcha' => 'Image', 
       'wordLen' => 6, 
       'timeout' => 300, 
       'font' => './fonts/Arial.ttf', 
       'imgDir' => './captcha/', 
       'imgUrl' => 'http://some_host/captcha/' 
      ), 
      'description' => '<div id="refreshcaptcha">Refresh Captcha Image</div>' 
     )); 

लेकिन उस मामले Description डेकोरेटर के विकल्प में संशोधित किया जाना चाहिए,: आप भी इस तरह Zend_Form_Element_Captcha विवरण विकल्प के रूप में क्लिक करने योग्य ताज़ा लिंक प्रस्तुत कर पाते हैं फॉर्म का init() विधि। मेरी अंग्रेजी के लिए खेद है। Btw मुझे यकीन है कि अगर मैं सही जगह में मेरी टिप्पणी डाल नहीं हूँ,)

0
  1. config/autoload/global.php में जोड़ने के निम्नलिखित

    'view_manager' => array(
        'strategies' => array(
         'ViewJsonStrategy','Zend\View\Strategy\PhpRendererStrategy' 
        ), 
    ), 
    
  2. YourModule/src/YourModule में
  3. Ajax
  4. अंदर Yourmodule/Ajax बनाने एक नया फ़ोल्डर बनाने एक फ़ाइल AjaxController.php

    namespace YourModule\Ajax; 
    
    use Zend\Mvc\Controller\AbstractActionController; 
    use Zend\View\Model\JsonModel; 
    use YourModule\Forms\SignupForm; 
    
    class AjaxController extends AbstractActionController 
    {   
        public function refreshSignupCaptchaAction(){ 
         $form = new SignupForm(); 
         $captcha = $form->get('captcha')->getCaptcha();    
         $data = array();     
         $data['id'] = $captcha->generate(); 
         $data['src'] = $captcha->getImgUrl().$captcha->getId().$captcha->getSuffix(); 
         return new JsonModel($data); 
        } 
    } 
    
  5. जोड़ें मार्ग के अंदर module.config.php

    'yourmodule-ajax' =>array(
         'type' => 'segment', 
         'options' => array(
         'route' => '/yourmodule/ajax/:action', 
          'constraints' => array( 
           'action' => '\w+', 
          ), 
          'defaults' => array(
           'controller' => 'YourModule\Ajax\AjaxController', 
          )     
         ), 
        ), 
    
  6. पिछले अपने खाके में, मैं तुम्हें jQuery

    <div class="form-group"> 
        <div id="captcha" class="control-group <?php echo count($form->get('captcha')->getMessages()) > 0 ? 'has-error' : '' ?>"> 
         <?php echo $this->formLabel($form->get('captcha')); ?> 
         <div class="col-xs-12 col-sm-6"> 
          <a id="refreshcaptcha" class="btn btn-default pull-right">Refresh</a> 
          <?php echo $this->formElement($form->get('captcha')); ?> 
          <?php echo $this->formElementErrors($form->get('captcha')); ?> 
         </div> 
        </div> 
    </div> 
    
    <script type="text/javascript"> 
    $(function(){ 
    
        $('#refreshcaptcha').click(function() { 
         $.ajax({ 
          url: '<?php echo $this->url('yourmodule-ajax', array('action'=>'refreshSignupCaptcha')) ?>', 
          dataType:'json', 
          success: function(data) { 
           $('#captcha img').attr('src', data.src); 
           $('#captcha input[type="hidden"]').attr('value', data.id); 
           $('#captcha input[type="text"]').focus(); 
          } 
         }); 
         return false; 
        }); 
    }); 
    </script> 
    
संबंधित मुद्दे