да. Обновился модуль, и весь код накрылся медным тазом...
Я сейчас использую другое решение, надеюсь оно будет более стойким к таким вывертам авторов модуля. На этот раз - прописываем в теме, в файле template.php:
да. Обновился модуль, и весь код накрылся медным тазом...
Я сейчас использую другое решение, надеюсь оно будет более стойким к таким вывертам авторов модуля. На этот раз - прописываем в теме, в файле template.php:
Ну, чтобы было ТО, изучите модуль капча, обмажьтесь логикой автора с ног до головы, напишите свои хуки, чтобы все было кошерно, а потом после очередного обновления модуля captcha вам возможно будет сурприз, и снова придется все переделывать Оно вам надо? Сильно ли оно не ТО, если буквы остаются теми же, и меняется только их кривизна? Вам обязательно надо иметь другое сочетание?
Комментарии
недавно реализовывал такую штуку в рамках custom-модуля для одного проекта. Даю нужные вырезки:
$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 - что то у меня не работает он
сайт не мультиязычный случайно, префикс урлов типа ru/en не используете?
мультиязычный, да. 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)
Ну, чтобы было ТО, изучите модуль капча, обмажьтесь логикой автора с ног до головы, напишите свои хуки, чтобы все было кошерно, а потом после очередного обновления модуля captcha вам возможно будет сурприз, и снова придется все переделывать Оно вам надо? Сильно ли оно не ТО, если буквы остаются теми же, и меняется только их кривизна? Вам обязательно надо иметь другое сочетание?