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

Главные вкладки

Аватар пользователя Stan.Ezersky Stan.Ezersky 26 декабря 2008 в 10:15

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

Комментарии

Аватар пользователя kosilko kosilko 26 декабря 2008 в 11: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>';
   }
}

Аватар пользователя kosilko kosilko 21 июня 2009 в 20: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 обработка на клик по изображению.

Аватар пользователя Huzzle Huzzle 4 января 2011 в 17:31

kosilko wrote:
да. Обновился модуль, и весь код накрылся медным тазом...
Я сейчас использую другое решение, надеюсь оно будет более стойким к таким вывертам авторов модуля. На этот раз - прописываем в теме, в файле 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 обработка на клик по изображению.

Так это все равно не то. Обновляется только шрифт, а сам текст остаётся тем же. Нужно чтобы все по аяксу менялось, и текст и начертание.

Аватар пользователя kosilko kosilko 27 июля 2009 в 18:57

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

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

Аватар пользователя burn burn 27 июля 2009 в 20:01

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

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

Аватар пользователя kosilko kosilko 27 июля 2009 в 20:22

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

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

Аватар пользователя kosilko kosilko 27 июля 2009 в 20: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);
}

?>
Аватар пользователя kosilko kosilko 10 января 2011 в 12:17

"Huzzle" wrote:
Так это все равно не то

Ну, чтобы было ТО, изучите модуль капча, обмажьтесь логикой автора с ног до головы, напишите свои хуки, чтобы все было кошерно, а потом после очередного обновления модуля captcha вам возможно будет сурприз, и снова придется все переделывать Smile Оно вам надо? Сильно ли оно не ТО, если буквы остаются теми же, и меняется только их кривизна? Вам обязательно надо иметь другое сочетание?