Capcha. Динамическое обновление

Прислано: Stan.Ezersky

пт, 26/12/2008 - 07:15

Скажите, а если ли аддон/хак для модуля captcha (6.x) позволяющий аяксом перезагружать (обновлять) картинку?
Пример, как бы хотелось:

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано kosilko в пт, 26/12/2008 - 08:23.

недавно реализовывал такую штуку в рамках custom-модуля для одного проекта. Даю нужные вырезки:

function mymodule_menu() {
   $items['image_captcha/refresh'] = array(
   'type' => MENU_CALLBACK,
   'access arguments' => array('access content'),
   'page callback' => '_mymodule_image_captcha_reload',
   );
   return $items;
}
 
function _mymodule_image_captcha_reload($form_id, $captcha_token) {
   $result = image_captcha_captcha('generate', 'Image');
   $_SESSION['captcha'][$form_id][$captcha_token] = $result['solution'];
   die($result['form']['captcha_image']['#value']);
}
 
function mymodule_form_alter(&$form, $form_state, $form_id) {
   if (isset($form['captcha']['captcha_image'])&&isset($form['captcha']['captcha_response'])) {
      $form['captcha']['captcha_image']['#prefix'] = '<div id="captcha_reloader"><a href="'.$_SERVER['REQUEST_URI'].'" onclick="'.($onclick = '$(\'#captcha_reloader a\').load(\''.url('image_captcha/refresh/'.$form_id.'/'.$form['captcha']['captcha_token']['#value']).'\');return false;').'">';
      $form['captcha']['captcha_image']['#suffix'] ='</a></div>Нифига непонятно?<button onClick="'.$onclick.'">сменить картинку</button>';
   }
}


Опубликовано ingumsky@drupal.org в пт, 26/12/2008 - 10:13.

Спасибо. Надо будет попробовать сделать такую же капчу по мотивам вашего кода -)


Опубликовано batbug в пт, 26/12/2008 - 12:36.

записал


Опубликовано Anton L. Safin в вт, 16/06/2009 - 09:14.

В captcha 6.x-2.0-beta4 не работает :(


Опубликовано kosilko в вс, 21/06/2009 - 16:09.

да. Обновился модуль, и весь код накрылся медным тазом...
Я сейчас использую другое решение, надеюсь оно будет более стойким к таким вывертам авторов модуля. На этот раз - прописываем в теме, в файле template.php:

<?php
function phptemplate_captcha($element) {
  static 
$js_added FALSE;
  if (!
$js_added) {
      
$js_added TRUE;
        
drupal_add_js('$("fieldset.captcha img").each(function(){$(this).click(function(){var src = $(this).attr("src").split("/");src[3]++;$(this).attr({"src":src.join("/")});}).css({"cursor":"pointer"});});','inline','footer');
  }
    return 
theme_captcha($element);
}

?>

Без изысков с кнопкой обновить, просто добавляется JS обработка на клик по изображению.


Опубликовано Loasty в вс, 21/06/2009 - 18:27.

А чем плох reCaptcha?


Опубликовано kosilko в вс, 21/06/2009 - 21:16.

а кто сказал что он плох? Дело вкуса. Я вот не использую.


Опубликовано burn в пн, 27/07/2009 - 10:23.

а можно поподробнее про код в template.php - что то у меня не работает он :(


Опубликовано Stan.Ezersky в пн, 27/07/2009 - 14:30.

"Loasty" написал(а):

А чем плох reCaptcha?

Преотличнейший модуль!


Опубликовано kosilko в пн, 27/07/2009 - 14:57.

"burn" написал(а):

а можно поподробнее про код в template.php - что то у меня не работает он :(

сайт не мультиязычный случайно, префикс урлов типа ru/en не используете?


Опубликовано burn в пн, 27/07/2009 - 16:01.

"kosilko" написал(а):

сайт не мультиязычный случайно, префикс урлов типа ru/en не используете?

мультиязычный, да. Path-префиксы ru/en, готовится еще de версия. А как это влияет на template.php ?


Опубликовано kosilko в пн, 27/07/2009 - 16:22.

"burn" написал(а):

мультиязычный, да. Path-префиксы ru/en, готовится еще de версия. А как это влияет на template.php ?

замените в коде src[3]++ на src[4]++


Опубликовано kosilko в пн, 27/07/2009 - 16:28.

или даже на src[src.length-1]++ для универсальности
т.е. полный код будет такой

<?php
function phptemplate_captcha($element) {
  static 
$js_added FALSE;
  if (!
$js_added) {
      
$js_added TRUE;
        
drupal_add_js('$("fieldset.captcha img").each(function(){$(this).click(function(){var src = $(this).attr("src").split("/");src[src.length-1]++;$(this).attr({"src":src.join("/")});}).css({"cursor":"pointer"});});','inline','footer');
  }
    return 
theme_captcha($element);
}

?>


Опубликовано burn в ср, 29/07/2009 - 07:25.

Большое спасибо, все работает.

Совместимо с модулем ajax_comments (проверено на dev-версии от 2009-07-21)


Новое на сайте

Ссылки партнёров