Capcha. Динамическое обновление
Прислано: Stan.Ezersky
пт, 26/12/2008 - 07:15
Скажите, а если ли аддон/хак для модуля captcha (6.x) позволяющий аяксом перезагружать (обновлять) картинку?
Пример, как бы хотелось:

- Stan.Ezersky's blog
- Для комментирования войдите или зарегистрируйтесь
недавно реализовывал такую штуку в рамках 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>'; } }
- Для комментирования войдите или зарегистрируйтесь
Спасибо. Надо будет попробовать сделать такую же капчу по мотивам вашего кода -)
- Для комментирования войдите или зарегистрируйтесь
записал
- Для комментирования войдите или зарегистрируйтесь
В captcha 6.x-2.0-beta4 не работает :(
- Для комментирования войдите или зарегистрируйтесь
да. Обновился модуль, и весь код накрылся медным тазом...
Я сейчас использую другое решение, надеюсь оно будет более стойким к таким вывертам авторов модуля. На этот раз - прописываем в теме, в файле 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 обработка на клик по изображению.
- Для комментирования войдите или зарегистрируйтесь
А чем плох reCaptcha?
- Для комментирования войдите или зарегистрируйтесь
а кто сказал что он плох? Дело вкуса. Я вот не использую.
- Для комментирования войдите или зарегистрируйтесь
а можно поподробнее про код в template.php - что то у меня не работает он :(
- Для комментирования войдите или зарегистрируйтесь
А чем плох reCaptcha?
Преотличнейший модуль!
- Для комментирования войдите или зарегистрируйтесь
а можно поподробнее про код в template.php - что то у меня не работает он :(
сайт не мультиязычный случайно, префикс урлов типа ru/en не используете?
- Для комментирования войдите или зарегистрируйтесь
сайт не мультиязычный случайно, префикс урлов типа ru/en не используете?
мультиязычный, да. Path-префиксы ru/en, готовится еще de версия. А как это влияет на template.php ?
- Для комментирования войдите или зарегистрируйтесь
мультиязычный, да. Path-префиксы ru/en, готовится еще de версия. А как это влияет на template.php ?
замените в коде src[3]++ на src[4]++
- Для комментирования войдите или зарегистрируйтесь
или даже на 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);
}
?>- Для комментирования войдите или зарегистрируйтесь
Большое спасибо, все работает.
Совместимо с модулем ajax_comments (проверено на dev-версии от 2009-07-21)
- Для комментирования войдите или зарегистрируйтесь




Комментарии