Aplico un zend captcha en mi página php ahora necesito agregar el botón de recarga de recarga. Por favor, responda de acuerdo con zend.¿Cómo volver a cargar la imagen de Zend Captcha al hacer clic en el botón Actualizar?
Respuesta
Solo dos fragmentos rápidos, pero creo que ya entenderás. Ajuste el nombre del elemento y los selectores para sus necesidades.
En su controlador agregar un método para generar un nuevo código de imagen
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);
}
En el script de vista (estoy usando mootools para el ajax-petición)
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();
});
});
Editar: jQuery añadido Pahan
$(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);
}
});
});
});
gracias por el código, funciona como encanto :) después de leer esto lo hice usando jquery. '$ (document) .ready (function() {$ ('# refreshcaptcha'). click (function() {$ .ajax ({url: '/ contact/refresh', dataType: 'json', success: function (datos) {console.log (datos) $ ('# contactForm img'). attr ('src', data.src); $ ('# captcha-id'). attr ('valor', data.id); }});});}); ' – pahan
@pahan De nada. Agregué su script jquery a mi respuesta para referencia posterior. Gracias. –
Hola, estoy enfrentando el mismo problema, ¿puedo saber que tu actualización es qué elemento, el mío es img pero no funcionaré? – user236501
@Benjamin Cremer gracias por el código, funciona como encanto :) después de leer esto Lo hice usando 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 En realidad, puede ser cualquier tipo de elemento Zend Form (por ejemplo, Button). Usted es incluso capaz de poner de refresco de enlace puede hacer clic Descripción Zend_Form_Element_Captcha opción como esta como:
$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>'
));
pero en Opciones ese caso Description
del decorador debe modificarse, por ejemplo:
$this->getElement('captcha')->getDecorator('Description')->setOptions(array(
'escape' => false,
'style' => 'cursor: pointer; color: #ED1C24',
'tag' => 'div'
));
Se puede hacer en forma init()
método. Lo siento por mi inglés. Por cierto que no estoy seguro si pongo mi comentario en el lugar correcto;)
En
config/autoload/global.php
añadir el siguiente'view_manager' => array( 'strategies' => array( 'ViewJsonStrategy','Zend\View\Strategy\PhpRendererStrategy' ), ),
- en
YourModule/src/YourModule
crear una nueva carpetaAjax
Dentro
Yourmodule/Ajax
crear un archivoAjaxController.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); } }
Agregar recorrido dentro
module.config.php
'yourmodule-ajax' =>array( 'type' => 'segment', 'options' => array( 'route' => '/yourmodule/ajax/:action', 'constraints' => array( 'action' => '\w+', ), 'defaults' => array( 'controller' => 'YourModule\Ajax\AjaxController', ) ), ),
pasado en su plantilla, que supongo que está utilizando 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. ¿Cómo puedo actualizar o volver a cargar el JFrame?
- 2. Actualizar simple Captcha
- 3. Actualizar/volver a cargar Flot en Javascript
- 4. Volver a cargar la página cuando se visita haciendo clic en el botón Atrás en Firefox
- 5. Cómo actualizar múltiples vistas parciales al hacer clic en Ajax.Actionlink
- 6. Android resaltar un botón imagen al hacer clic en
- 7. Ir a diferentes URL al hacer clic en el botón
- 8. ¿Cómo volver a cargar TreeStore?
- 9. Cómo configurar la imagen compartida al hacer clic en el botón Me gusta
- 10. ¿Cómo hacer una imagen de carga al cargar video HTML5?
- 11. actualizar o volver a cargar la tabla de datos
- 12. flashvars Actualizar y volver a cargar el flash con jQuery
- 13. mostrar/ocultar la imagen al hacer clic
- 14. Botón al hacer clic en cambio de estado visual
- 15. Deshabilitar botón al hacer clic, pero habilitar otro botón
- 16. Cómo agregar Captcha en Zend Form?
- 17. ¿Cómo actualizar/volver a cargar el incrustado de la aplicación/pdf?
- 18. ¿Cómo podemos mostrar la animación Curl de página al hacer clic en el botón en android
- 19. Fuerza volver a pintar después de clic de botón
- 20. Android enviar SMS automáticamente al hacer clic en el botón
- 21. ¿Ejecuta una función PHP al hacer clic en el botón?
- 22. ¿Cómo se maneja un botón al hacer clic en Android?
- 23. ¿Cómo actualizar mi UITableView con UISearchBar después de hacer clic en el botón Cancelar de UISearchBar?
- 24. Jquery cambiar imagen al hacer clic
- 25. ¿Cómo recargar mi UIViewController al hacer clic en algunos botones?
- 26. Hacer que un botón de Android cambie el fondo al hacer clic en XML
- 27. Cómo agregar componentes a TScrollBox dinámicamente uno debajo de otro al hacer clic en el botón?
- 28. Botón de opción de verificación al hacer clic en DIV
- 29. ¿Cómo borrar la caché del navegador al volver a cargar la imagen con el mismo nombre de archivo, en php?
- 30. ¿Cómo hacer que el botón no se pueda hacer clic después de hacer clic en él?
Este es el comportamiento por defecto de Zend_Captcha. ¿Podría proporcionar algún código de ejemplo para ilustrar su problema? – leek