В первой части был написан модуль, для одобрения анонимных комментариев в один клик. В этой части добавим к нему AJAX функции.
В папке модуля создаём файл ajax_publish.js со следующим содержанием:
Drupal.behaviors.ajax_publish = function(){
$('li.ajax_publish_publish a').click(function(){
var $a = $(this);
// при клике показываем pre-loader после ссылки
var $preloader = $('<span>').css({
'display': 'inline-block',
'width': '20px',
'height': '12px',
'vertical-align': 'middle',
'background': 'url(/misc/throbber.gif) no-repeat right -21px'
}).appendTo($a.parent());
// посылаем ajax запрос на публикацю комментария
$.get($a.attr('href'), function(response){
responseObject = Drupal.parseJson(response);
if (responseObject.status)
{
$a.parents('.comment-unpublished').removeClass('comment-unpublished').addClass('comment-published');
$a.parent().remove();
}
$preloader.remove();
});
return false;
});
}
Подключаем его с помощью функции drupal_add_js и хука hook_nodeapi — в файл ajax_publish.module добавляем:
/**
* Реализация hook_nodeapi()
*/
function ajax_publish_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL)
{
if ($op == 'view' && $a3 == false)
{
drupal_add_js(drupal_get_path('module', 'ajax_publish') .'/ajax_publish.js');
}
}
Теперь при клике на ссылке опубликовать, запрос на сервер будет отправлен с помощью AJAX, без перезагрузки страницы.
Модифицируем функцию ajax_publish_publish
таким образом, чтобы при AJAX запросе, вместо редиректа, возвращался статус операции в JSON формате:
/**
* Menu callback для url "comment/publish"
* Публикация комментария
*/
function ajax_publish_publish($cid = 0)
{
if (!$cid) return false;
$operations = comment_operations('publish');
db_query($operations['publish'][1], $cid);
if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
{
drupal_json(array('status' => true));
}
else
{
drupal_set_message('Комментарий #' . $cid . ' опубликован');
drupal_goto(referer_uri(), null, 'comment-' . $cid);
}
}
Похожие записи
- Пишем модуль утверждения комментариев в один клик. Часть 1
- AJAX ссылки в Drupal 7 на примере листалки последних комментариев
- Очередная серия видеоуроков от Drupalize.me — Module Development for Drupal 7
- Пишем простой модуль защиты от спама
- Модуль AJAX Comments — добавление комментариев без перезагрузки страницы
Комментарии
Спасибо огромное, облегчили работу
Спасибо огромное. Побольше бы таких разработчиков.
Не сразу, но примерно начал понимать как делать формы друпала ajax'овыми.
Пишите еще.
для ajax-овых форм лучше использовать AHAH
Спасибо. Нашел много информации по AHAH в друпале.
Читаю мануалы. Сейчас пытаюсь вызвать целиком всю форму. Везде написано только про отдельные элементы формы в связке с AHAH, а про целую форму ничего пока не нашел.
Я что-то неправильно отдаю ему скорее всего. Если отдавать пустую друпаловскую страницу с формой, то выдает какой то страшный алерт с полным html ответа. Если завершать php после drupal_get_form(""), то есть выдавать только html формы, то видимо какой то неправильный html отдается и javascript выдает ошибку.
Ладно разберусь. Понятно куда копать если что.
Обнаружилась бага =(
Если я аноним и печатаю 1ый коммент в ноде - при публикации посредством этого модуля из ноды админом, не обновляется счетчик комментов почему-то, сейчас сам залезу в код и посмотрю что там к чему. То есть он появляется, а счетчик как был на 0 так и есть ... Только после добавления коммента админом самолично - счетчик нормализуется и выводит 2 коммента.
при публикации комментария можно обновлять статистику ноды с помощью функции
_comment_update_node_statistics($nid);
надеюсь, как узнать $nid по $cid, разберётесь самостоятельно
добавил в модуль из API функцию
0ль эмоций ... конкретнее подскажите пжалуйста, не рылся так глубоко =)
_comment_update_node_statistics это функция а не хук, её надо вызвать в
ajax_publish_publish
, предварительно узнав nid с помощью _comment_loadСпасибо, разобрался! Поможем будущим искателям, надо добавить 2 строчки:
Добавить комментарий