Stosuję Zend Captcha na mojej stronie php, teraz potrzebuję dodać przycisk przeładowania captcha. Proszę udzielić odpowiedzi zgodnie z Zendem.Jak ponownie załadować obraz Zend Captcha po kliknięciu przycisku odświeżania?
Odpowiedz
Tylko dwa krótkie fragmenty, ale myślę, że dostaniesz pomysł. Dostosuj nazwę elementu i selektory do swoich potrzeb.
W kontrolerze dodać metodę do generowania świeżym CAPTCHA
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);
}
W skrypcie widoku (używam Mootools dla AJAX żądanie)
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();
});
});
EDIT: jQuery Dodano pahan za
$(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);
}
});
});
});
dzięki za kod, działa jak urok :) po przeczytaniu tego zrobiłem to za pomocą jquery. '$ (document) .ready (function() {$ ('# refreshcaptcha'). click (function() {$ .ajax ({url: '/ contact/refresh', dataType: 'json', success: function (dane) {console.log (dane) $ ('# contactForm img'). attr ('src', data.src); $ ('# captcha-id'). attr ('value', data.id); }});});}); ' – pahan
@pahan Nie ma za co. Dodałem twój skrypt jQuery do mojej odpowiedzi, aby móc go później użyć. dzięki. –
Witam, mam do czynienia z tym samym problemem, czy wiem, że twój refreshcaptcha jest tym, co jest moje, to jest moje zdjęcie, ale nie będę działać? – user236501
@Benjamin Cremer dzięki za kod, działa jak urok :) po przeczytaniu tego zrobiłem to za pomocą 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);
}
});
});
});
@ user236501 W rzeczywistości może być dowolnym typem elementu Zend Form (na przykład Button). Jesteś nawet w stanie umieścić klikalny link odświeżania jako opis Zend_Form_Element_Captcha opcji jak ten:
$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>'
));
ale w opcji takim przypadku Description
dekorator powinien zostać zmieniony, na przykład:
$this->getElement('captcha')->getDecorator('Description')->setOptions(array(
'escape' => false,
'style' => 'cursor: pointer; color: #ED1C24',
'tag' => 'div'
));
można to zrobić w Metoda formularza: init()
. Przepraszam za mój angielski. Btw nie jestem pewien, czy mogę umieścić mój komentarz w odpowiednim miejscu;)
W
config/autoload/global.php
dodać następujące'view_manager' => array( 'strategies' => array( 'ViewJsonStrategy','Zend\View\Strategy\PhpRendererStrategy' ), ),
- w
YourModule/src/YourModule
utworzyć nowy folderAjax
Wewnątrz
Yourmodule/Ajax
tworzyć plikAjaxController.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); } }
dodawania trasa wewnątrz
module.config.php
'yourmodule-ajax' =>array( 'type' => 'segment', 'options' => array( 'route' => '/yourmodule/ajax/:action', 'constraints' => array( 'action' => '\w+', ), 'defaults' => array( 'controller' => 'YourModule\Ajax\AjaxController', ) ), ),
ostatni w szablonie, zakładam, że używasz 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>
- 1. Przycisk odświeżania strony po kliknięciu
- 2. Jak ponownie załadować TreeStore?
- 3. Używanie standardowego przycisku odświeżania
- 4. Jak otworzyć Eksploratora Windows po kliknięciu przycisku?
- 5. Jak otworzyć menu kontekstowe po kliknięciu przycisku?
- 6. JQgrid na przycisku odświeżania kliknij
- 7. jQuery - Zwiększ wartość licznika po kliknięciu przycisku
- 8. Jak po kliknięciu zrobić obraz/drgać?
- 9. Jak ponownie załadować stronę po zmianie orientacji?
- 10. Jak ponownie załadować moduł po zmianie?
- 11. android edittext usuwa fokus po kliknięciu przycisku
- 12. Jak ponownie załadować aplikację Angular 2 po wylogowaniu użytkownika?
- 13. Jak wyświetlić animację Curl strony po kliknięciu przycisku w Androidzie?
- 14. Losowy obraz tła podczas odświeżania
- 15. jQuery zapobieganie odświeżeniu strony po kliknięciu przycisku
- 16. Android: Ukryj klawiaturę po kliknięciu przycisku
- 17. zmienia kolor tła przycisku po kliknięciu
- 18. Flask: Pobierz plik csv po kliknięciu przycisku
- 19. Jak ponownie załadować gdbinit?
- 20. Zminimalizuj aplikację po kliknięciu przycisku Wstecz Android
- 21. UIRefreshControl - Jak wykonać czynność odświeżania po zwolnieniu przycisku dotykowego?
- 22. WPF Zmień obraz tła po kliknięciu
- 23. Zmiana nazwy przycisku po kliknięciu - Java JButton
- 24. Android: Przełącz kamerę po kliknięciu przycisku
- 25. Aktualizacja danych (JQuery) po kliknięciu przycisku
- 26. aktywować aplikację po kliknięciu przycisku zasilania
- 27. Zanikanie wyskakującego okna po kliknięciu przycisku?
- 28. Pytanie o potwierdzenie po kliknięciu przycisku "X"
- 29. Otwórz okno dialogowe po kliknięciu przycisku
- 30. Kolor tła przycisku zmiany Androida po kliknięciu
Jest to domyślne zachowanie Zend_Captcha. Czy możesz podać przykładowy kod ilustrujący twój problem? – leek