Форма комментирования в 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, добавляющий соответствующие разрешения.

Изображение пользователя Гость.

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

Изображение пользователя Гость.

Вопрос: как запретить в комментариях публикацию ссылок?

Изображение пользователя Гость.

kudryashovda, внести изменения в фильтр ввода. По умолчанию комментарии проходят через фильтр "Filtered HTML", где разрешен тег <а>.

Управление сайтом - настройка - форматы ввода, кликаем на "настроить" напротив Filtered HTML и удаляем среди допустимых тегов тег < a>. Хотя если в других материалах надо публиковать ссылки и при этом обязательно использовать Filtered HTML, то можно для комментариев создать отдельный фильтр, а не изменять основной.

Изображение пользователя Гость.

А как в пункте удалить старые поля и добавит свои новые?

Изображение пользователя Гость.

В пункте 2

Изображение пользователя Гость.

А можно модерировать комментарии? Чтоб только после разрешения админа они могли опубликовываться?

Изображение пользователя Гость.

Гость, размещение комментариев сразу или после модерации настраивается в правах доступа admin/user/permissions.
По поводу удаление некоторых полей и добавление новых ничего конкретного посоветовать не могу. На вскидку или попытаться найти нужный модуль, или же кастомизировать стандартный модуль comment. Когда мне надо запретить вывод поля для ввода адреса домашней страницы, оставив только поле ника и e-mail, я в модуле просто перестаю выводить это поле, не удаляя его. Т.е. оно есть, но не выводится. Но это уже надо документацию читать и исходники изучать.

Изображение пользователя Гость.

Но тут же написано "По дефолту в форме комментирования есть всего два поля – тема комментария и сам комментарий. Добавляем поля имя, e-mail, url и убираем поле «тема»...". Значит автор наверняка знает как добавлять поля с мылом и именем :)

Изображение пользователя Гость.

А, речь идет о стандартных полях контактов, я подумал, что надо добавить что-то свое. Тогда все просто - переходим в раздел управления материалами (admin/content/types), кликаем на "изменить" напротив нужного нам типа материала, разворачиваем меню "Установки комментариев" и ставим галку напротив "Анонимные пользователи могут оставлять контактную информацию" или "Анонимные пользователи должны указывать контактную информацию".
PS
Не внимательно читали, это как раз написано в статье, в пункте 2:
-Анонимные комментарии:
Анонимные пользователи должны указывать контактную информацию

Изображение пользователя Гость.

Давно искал информацию на эту тему, спасибо! Обычно в темах Drupal, в начале каждого поста выводиться "главная", "блоги", "блог (имя пользователя)", не подскажите как убрать совсем эти строчки из темы?

Изображение пользователя Гость.

Vardi, по описанию смахивает на так называемые "хлебные крошки". За их вывод отвечает переменная $breadcrumb в файле page.tpl.php. Если таковая есть, попробуйте ее закомментировать или удалить. Если не поможет, то надо вручную просмотреть файлы *.tpl.php в папке с вашей темой. Например, если ссылка появляется только в постах и отсутствует на других страницах, то надо смотреть файл node.tpl.php.

Изображение пользователя Гость.

Покопаюсь в указанных файлах, также теперь буду знать как это называется. Спасибо большое.

Изображение пользователя Гость.

Вот здесь http://drupal.org/node/190815 список всех возможных *.tpl.php файлов, которые могут встретиться (для Drupal 6) с указанием всех возможных переменных. Если какого-нибудь tpl файла нет в папке с шаблоном, то значит он вообще не используется или не переопределен при создании темы и используется стандартный из ядра, тогда найти его можно в папке /modules/"название модуля"/. Причем файлы, находящиеся в папке modules лучше не править, а скопировать в папку с темой и там уже изменять его как захочется, по дефолту будет использоваться именно файл из папки с темой (справедливо в основном только для файлов *.tpl.php, с другими файлами так просто не получится).

Изображение пользователя Гость.

С Drupal`ом знаком совсем недавно, пока тестирую на локальном сервере, в планах поставить на нем свой автономный блог. Благодарю за ссылку и подробное объяснение, несмотря на то, что мои познания в английском сильно ограничены, думаю сумею разобраться.

Изображение пользователя Гость.

Этот блог кстати на Drupal'e. Плюс и другие блоги тоже делаю исключительно на Друпале, парочку сделал на WP, но потом одумался и перенес на Drupal=) Так что в качестве блог-платформы эта CMS очень хорошо подходит.
А с английским придется подружиться) Я очень долго всячески пытался огородиться от чтения drupal.org, однако не получилось, замены ему найти ну никак не получится. Всякие обзорные статьи можно найти на русском (делал обзор сайтов про Друпал, http://www.tulvit.ru/drupal/sajty-pro-drupal, больше качественных ресурсов найти не удалось), но конкретно документация только на английском. А сделать что-то "нестандартное", что не описано в блогах и на форумах, рано или поздно придется, и вот тогда на помощь придет грамотно структурированная и хорошо написанная без "воды" документация на drupal.org.

Изображение пользователя Гость.

Насчет того, что этот блог работает на Drupal'e заметил с помощью плагина для браузера, поэтому и заинтересовался им. Стараюсь доскональный изучить все сайты встречаемые мне на этом движке. WP самому не понравился после близкого знакомства и работы с ним. А как с хостингом при нормальных нагрузках? С английским подружусь раз такое дело :)

Изображение пользователя Гость.

/WP самому не понравился
WP ограничен очень, чисто под блоги, а Drupal это по большому счету фреймворк, собрать можно практически что угодно. Но сложней, на WP получаем сразу же готовый блог с интуитивно понятной админкой, а Drupal "из коробки" имеет малую функциональность, надо устанавливать дополнительные модули, настраивать.
/Стараюсь доскональный изучить все сайты встречаемые мне на этом движке.
В рунете мало достойных сайтов на Друпале, однако в англоязычном сегменте эту CMS очень даже любят. Делал как-то подборку известных сайтов на Друпале http://www.tulvit.ru/drupal/izvestnye-sajty-na-drupal.
/А как с хостингом при нормальных нагрузках?
Врать не буду, не знаю. Особо посещаемых сайтов нет, пару сотен уников в день не в счет, слишком мало, чтобы судить о производительности движка. А так на хостинг за 15$ умудряюсь засовывать несколько десятков сайтов на Друпале, особых тормозов не замечал (опять таки при отсутствии значительного трафика).

Изображение пользователя Гость.

За то и выбрал Drupal, за огромную расширяемость и возможность создать на его основе практически любой сайт. Помимо блога собираюсь запустить СДЛ, так как клепать сайты исключительно для заработка в большом количестве уже надоело, а тут опять таки Drupal будет очень кстати. К тому же вариант с модулями и малым функционалом вначале, мне кажется гораздо более удобным, чем готовые решения из коробки, где все уже выбрано в расчете на массового пользователя.
Насчет сайтов и блогов на этой CMS в рунете, согласен, встречал их не так уж и много. Хотя несколько достойных вариантов, включая и этот блог, все таки нашел.
Из минусов могу лишь отметить, что я совсем не программист, html подправить и изменить смогу без проблем, а вот php мне совсем не знаком. Однако, в случае надобности, будем разбираться.

Изображение пользователя Гость.

/опять таки Drupal будет очень кстати
Drupal вообще универсален, я вот сейчас на нем дорвеи собираюсь клепать=) Ну а для СДЛ вообще оптимальный вариант, т.к. сайт можно делать по схеме "идея сайта - реализация сайта", а не "идея сайта - возможности движка - реализация сайта с учетом возможностей движка". Начинал осваивать CMS-ки c Joomla, тоже не в какое сравнение с Drupal не идет, все никак руки не дойдут перенести пару сайтов с нее на Drupal.
/html подправить и изменить смогу без проблем
Еще css пригодится, тогда уже можно будет изменять отображение всего и вся как угодно. Сейчас ведь по сути верстка таблицами изжила себя полностью, соответственно чистого html недостаточно в большинстве случаев, все делается стилями. Из книг могу посоветовать "CSS - каскадные таблицы стилей. Подробное руководство." Эрика А. Мейера (в переводе, конечно). Книга большая, 500+ страниц, но разжевано все хорошо, я по ней css учил, вроде как получилось=)
/php мне совсем не знаком
Программировать в большинстве случаев не надо, только если уж приспичит писать свои модули или переписывать чужие. Но понимать код на элементарном уровне желательно. Есть такая книжка "Самоучитель PHP" Вадима Дунаева, тонкая, в основном основы. Если был опыт программирования на других языках, то книга осваивается за день, максимум два. Полученных знаний хватит для работы с Drupal-ом с головой, исходники будут читаться легко, код в Друпале оформлен крайне понятно.

Изображение пользователя Гость.

С Jooml`ой поработал всего один день, вполне хватило что бы быстро посмотреть эту систему и так же быстро ее удалить. CSS править приходилось, вроде нужные результаты получал. Спасибо за книги, первую скачал, вторую в свободном доступе не нашел, заменил на небольшой учебник по php, на первое время должно хватить. Дорвеи на Drupal это что-то новенькое, мне лично статических вполне хватало :)

Изображение пользователя Гость.

Еще советую немного почитать про DOM(Document Object Model), верстать станет значительно легче, т.к. начинаешь понимать, как браузер вообще обрабатывает код и почему желательно тот же тег p закрывать, да и кучу прочих мелочей.
/Дорвеи на Drupal это что-то новенькое, мне лично статических вполне хватало
CMS дает больше свободы, можно удаленно править базы и добавлять контент, а перелинковка будет происходить автоматически, можно настроить автообновления по крону, прикрутить разные фичи типа опросов, вести на сервере статистику наиболее посещаемых страниц и делать сквозные ссылки на них с нужными анкорами, улучшая таким образом внутреннюю оптимизацию и продвигая дальше в топ наиболее трафикогенерящие запросы... Это все в теории, правда=) Т.к. только-только начал этим заниматься.

Изображение пользователя Гость.

Про DOM почитаю, но думаю самому верстать с нуля нечего не придется, либо закажу тему оформления, либо переделаю существующую из паблика, по мере возможности так сказать. Насчет дорвеев на Drupal, может выйти слишком большая трудозатрата и не окупаемость этого. Но это тоже в теории, так как этого не разу не делал. Будет интересно почитать о результатах на блоге.

Изображение пользователя Гость.

В дорвеестроительстве я пока только теоретик по большому счету. В голове вертится образ идеального дора, на Drupal'e + самописных скриптах, думаю, вполне реально сделать. Все имеющиеся доргены в паблике меня в корне не устраивают, писать свою CMS-ку специально для дорвеев слишком муторно. Drupal в таком случае идеально подходит. Тем более я в адалт не суюсь, соответственно большого трафика не будет и за нагрузку на хостера можно не беспокоиться.

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

2 + 8 =
Введите ответ/цифрой/. Например, для вопроса "9 + 5 =" правильным ответом будет 14.