Drupal → Пишем модуль утверждения комментариев в один клик. Часть 1
В первой части мы напишем модуль который добавит каждому не опубликованному комментарию новое действие "опубликовать", помимо уже присутствующих там удалить, изменить и ответить. Во второй части добавим немного Javascript-а и сделаем это действие на AJAX.

Создаём каркас модуля
В папке sites/all/modules создаём новую директорию ajax_publish. В этой директории создаём файл ajax_publish.info со следующим содержимым:
; $Id$ name = AJAX Publish description = Публикация комментариев в один клик version = 6.x-0.1 core = 6.x
Напомню, что все файлы должны быть в кодировке UTF-8 without BOM.
В этой же директории создаём файл ajax_publish.module в котором будет находится код модуля. Начальное содержимое этого файла:
<?php // $Id$ /** * @file * AJAX Publish */
Закрывающий дескриптор ?> не рекомендуется. Весь код будет помещаться в конец этого файла.
Включаете модуль AJAX Publish на странице управления модулями (admin/build/modules).
Добавляем новое действие
По умолчанию у каждого комментария есть три действия: удалить, изменить и ответить. Чтобы добавить к ним новое, нужно воспользоваться хуком hook_link, который вызывается при каждой генерации комментария и возвращает массив ссылок (действий).
В файл ajax_publish.module добавляем:
/** * Реализация hook_link() */ function ajax_publish_link($type, $object, $teaser = false) { $links = array(); // выводим ссылку только для неопубликованных комментариев и // пользователям которые имеют права управлять комментариями if ($type == 'comment' && $object->status == 1 && user_access('administer comments')) { $links['ajax_publish_publish'] = array( 'title' => 'опубликовать', 'href' => 'comment/publish/' . $object->cid ); } return $links; }
После этого можно написать комментарий от незалогинённого юзера и посмотреть на результат под админом.
Создаём функцию обратного вызова
Функция обратного вызова — это функция которая будет выполнятся при клике по ссылке "опубликовать".
Первым делом нужно зарегистрировать нашу функцию в качестве callback функции, для этого используется хук hook_menu. В файл ajax_publish.module добавляем:
/** * Реализация hook_menu() */ function ajax_publish_menu() { $items['comment/publish'] = array( 'title' => 'Опубликовать комментарий', 'page callback' => 'ajax_publish_publish', 'access arguments' => array('administer comments'), 'type' => MENU_CALLBACK, ); return $items; }
Очищаем кэш. Теперь при клике по ссылке "опубликовать", Drupal будет искать функцию ajax_publish_publish в файле модуля, и при удачном поиске выполнит её.
Вот и сама функция, в файл ajax_publish.module добавляем:
/** * 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); drupal_set_message('Комментарий #' . $cid . ' опубликован'); drupal_goto(referer_uri(), null, 'comment-' . $cid); }
Комментарии
Огромное спасибо, это то что я так долго искал!
И вообще благодаря таким вот урокам, как Ваши, где всё чётко по полочкам разложено, хочется продолжать осваивать Drupal. Добавил сайт себе в закладки. Спасибо!
Оставить комментарий