Форма комментирования в Drupal

Стандартная форма комментирования в CMS Drupal настолько далека от идеала, что без некоторых доработок ее использование крайне нецелесообразно. Ниже распишу по пунктам, как с помощью дополнительных модулей и небольших изменений в коде привести ее в человеческий вид. Актуально для Drupal 6.x /в 5.x свои грабли, а 7.x стабильной версии пока еще нет/.

1. Разрешаем комментировать анонимным пользователям.
Управление пользователями/Разрешения/модуль comment
Здесь настраиваем права доступа для анонимусов.

2. По дефолту в форме комментирования есть всего два поля – тема комментария и сам комментарий. Добавляем поля имя, e-mail, url и убираем поле «тема»
Содержание/Типы материалов
Нажимаем «изменить» у интересующего нас типа и переходим на «Установки комментариев», где выставляем нужные опции.
Я обычно ставлю:
- Режим показа по умолчанию:
Плоский список – развёрнутый
- Порядок сортировки по умолчанию:
По дате - сначала старые
-Управление комментариями:
Не показывать
-Анонимные комментарии:
Анонимные пользователи должны указывать контактную информацию
-Поле темы комментария:
Отключено
-Просмотр комментария перед отправкой:
Необязательно
-Расположение формы отправки комментария:
Показывать ниже сообщения или комментариев

3. Капча
Встроенной капчи нет, поэтому устанавливаем модуль. Я предпочитаю математическую капчу, за нее отвечает модуль captcha. Качаем, ставим, настраиваем, переводим интерфейс/все делается в админке/.

4. Кнопка «ответить» в комментариях
Какой бы вид отображения мы бы не выбрали, плоский или древовидный, под каждым комментарием будет оставаться кнопка ответить. Чтобы ее убрать, качаем модуль flatcomments. После установки идем в Содержание/Типы материалов, переходим по «изменить» напротив интересующего нас типа материала и ставим галку напротив Do not show a reply link on comments.

5. Возвращаемся к полю «тема комментария». Хоть мы и убрали это поле, при публикации коммента она будет отображаться в виде первых слов комментария. Чтобы это исправить, открываем файл comment.tpl.php в папке с нашей темой и удаляем или закомментируем следующие строки:
<?php if ($title) echo $title; ?>

6. Для анонимусов под формой комментария будет дан выбор, какой фильтр ввода использовать, и приведена ссылка «Подробнее о форматировании».
Если первое решается через ограничение прав доступа анонимусов к изменению форматов ввода, то чтобы убрать ссылку на ф.а.к. по форматированию, придется лезть в код.
Открываем файл template.php в корне нашей темы и добавляем внизу пару строк:

  1. function phptemplate_filter_tips() { return ''; }
  2. function phptemplate_filter_tips_more_info() { return ''; }

7. После публикации комментария сразу за именем анонимуса всегда пишется (не проверено), даже если премодерация отключена. Чтобы эту надпись убрать, снова открываем template.php и вниз кода вставляем следующее:

  1. function phptemplate_username($object) {
  2.  
  3.   if ($object->uid && $object->name) {
  4.     // Shorten the name when it is too long or it will break many tables.
  5.     if (drupal_strlen($object->name) > 20) {
  6.       $name = drupal_substr($object->name, 0, 15) .'...';
  7.     }
  8.     else {
  9.       $name = $object->name;
  10.     }
  11.  
  12.     if (user_access('access user profiles')) {
  13.       $output = l($name, 'user/'. $object->uid, array('title' => t('View user profile.')));
  14.     }
  15.     else {
  16.       $output = check_plain($name);
  17.     }
  18.   }
  19.   else if ($object->name) {
  20.     // Sometimes modules display content composed by people who are
  21.     // not registered members of the site (e.g. mailing list or news
  22.     // aggregator modules). This clause enables modules to display
  23.     // the true author of the content.
  24.     if ($object->homepage) {
  25.       $output = l($object->name, $object->homepage);
  26.     }
  27.     else {
  28.       $output = check_plain($object->name);
  29.     }
  30.  
  31.     //$output .= ' ('. t('not verified') .')';
  32.   }
  33.   else {
  34.     $output = variable_get('anonymous', t('Anonymous'));
  35.   }
  36.  
  37.   return $output;
  38. }

8. Теперь вид информации о комментирующем приобрел такой вид «Опубликовано Гость в Вс, 2009-07-12 21:48». Красиво конечно, но хочется «Гость - 12/07/2009 в 21:48».

Для этого сначала открываем файл comment.tpl.php и заменяем <?php echo $submitted; ?> на <?php echo "$author - $date"; ?>.
Потом идем в Настройка сайта/Дата и время, выбираем Средний формат даты: Пользовательский формат и прописываем шаблон даты d/m/Y в H:i.

Вот и все. Теперь у нас человеческая форма комментирования.

PS
1. У шестого друпала очень агрессивное кэширование, поэтому чаще всего сделанные изменения вы не увидите без чистки кэша - Настройка сайта/Производительность/Очистить кеш данных.

2. Иногда вместо имени функции «phptemplate» надо вставить название шаблона/имя папки с шаблоном/. Так что если после вставки кода сайт не открывается или код не работает – заменяем phptemplate на название нашего шаблона.

3. Описанная реализация наиболее правильная, т.к. не приходится редактировать ядро и все изменения проводятся только в файлах шаблона.

С пунктами 6-7 разбирается модуль better_formats, добавляющий соответствующие разрешения.


Спасибо! Применил для своего сайта.


Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
5 + 4 =
Введите ответ/цифрой/. Например, для вопроса "9 + 5 =" правильным ответом будет 14.