О сайтах и не о сайтах

Теперь и в tg!

tg

Переехал с твиттера на t.me/tulvit_blog, если что.

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

6. Для анонимусов под формой комментария будет дан выбор, какой фильтр ввода использовать, и приведена ссылка «Подробнее о форматировании».
Если первое решается через ограничение прав доступа анонимусов к изменению форматов ввода, то чтобы убрать ссылку на ф.а.к. по форматированию, придется лезть в код.
Открываем файл template.php в корне нашей темы и добавляем внизу пару строк:
function phptemplate_filter_tips() { return ''; }
function phptemplate_filter_tips_more_info() { return ''; }

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

function phptemplate_username($object) {

if ($object->uid && $object->name) {
// Shorten the name when it is too long or it will break many tables.
if (drupal_strlen($object->name) > 20) {
$name = drupal_substr($object->name, 0, 15) .'...';
}
else {
$name = $object->name;
}

if (user_access('access user profiles')) {
$output = l($name, 'user/'. $object->uid, array('title' => t('View user profile.')));
}
else {
$output = check_plain($name);
}
}
else if ($object->name) {
// Sometimes modules display content composed by people who are
// not registered members of the site (e.g. mailing list or news
// aggregator modules). This clause enables modules to display
// the true author of the content.
if ($object->homepage) {
$output = l($object->name, $object->homepage);
}
else {
$output = check_plain($object->name);
}

//$output .= ' ('. t('not verified') .')';
}
else {
$output = variable_get('anonymous', t('Anonymous'));
}

return $output;
}

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

Для этого сначала открываем файл comment.tpl.php и заменяем на .
Потом идем в Настройка сайта/Дата и время, выбираем Средний формат даты: Пользовательский формат и прописываем шаблон даты 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, однако не получилось, замены ему найти ну никак не получится. Всякие обзорные статьи можно найти на русском (делал обзор сайтов про Друпал, больше качественных ресурсов найти не удалось), но конкретно документация только на английском. А сделать что-то "нестандартное", что не описано в блогах и на форумах, рано или поздно придется, и вот тогда на помощь придет грамотно структурированная и хорошо написанная без "воды" документация на drupal.org.

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

/WP самому не понравился
WP ограничен очень, чисто под блоги, а Drupal это по большому счету фреймворк, собрать можно практически что угодно. Но сложней, на WP получаем сразу же готовый блог с интуитивно понятной админкой, а Drupal "из коробки" имеет малую функциональность, надо устанавливать дополнительные модули, настраивать.
/Стараюсь доскональный изучить все сайты встречаемые мне на этом движке.
В рунете мало достойных сайтов на Друпале, однако в англоязычном сегменте эту CMS очень даже любят. Делал как-то подборку известных сайтов на Друпале.
/А как с хостингом при нормальных нагрузках?
Врать не буду, не знаю. Особо посещаемых сайтов нет, пару сотен уников в день не в счет, слишком мало, чтобы судить о производительности движка. А так на хостинг за 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 в таком случае идеально подходит. Тем более я в адалт не суюсь, соответственно большого трафика не будет и за нагрузку на хостера можно не беспокоиться.

отличная статья, спасибо автору

Спасибо Доходчиво Получилось и пока работают ваши коды.
Вопрос: как получили такую форму отправки комментарий (что находится выше).
Поискал в style.css темы, нашел, но так как у вас сделать форму не получается, хочу еще убрать поле ввода - Домашняя страница- ?? Спасибо.

zax,
Поискал в style.css темы, нашел, но так как у вас сделать форму не получается

Установите себе расширение Firebug для FireFox'a, посмотрите какие стили цепляются к форме комментирования, и просто перепишите их в файл style.css своей темы.

хочу еще убрать поле ввода - Домашняя страница

В админке Друпала эту проблему не решить. Либо лезть в модуль comment и там закомментировать код, отвечающий за вывод формы для ввода домашней страницы, либо вписать в файл template.php нужной темы пару функций:

function phptemplate_theme(&$existing, $type, $theme, $path)
{
$hooks = phptemplate_theme($existing, $type, $theme, $path);
$hooks['comment_form'] = array('arguments' => array('form' => NULL));
return $hooks;
}
function phptemplate_comment_form($form)
{
unset ($form['homepage']);
return drupal_render($form);
}

Где phptemplate заменить на имя темы. Этот метод самый правильный, т. к. не затрагивается ядро.

посмотрите какие стили цепляются к форме комментирования -- посмотрел, те же самые что и в style.css. Цепляются стили из system.css (мой сайт/modules/system/system.css), начал исправлять форму комментирования и соответственно исправления пошли по всему сайту. Может не туда пошел? Черкните пару строк. Спасибо.

забросил стиль из system.css в style.css - исправления идут по всему сайту (формы комментирования изменяются на всех страницах сайта) и чтобы такое сделать еще?? Ни сабражу??

zax, я вообще-то не совсем понимаю, чего вы хотите =) Если нужно внести какие-то изменения в теме, которые можно сделать средствами CSS, то просто пишите нужный код в style.css своей темы (а не изменяете стили, прописанные в стандартных модулях).

Доброе утро, tulvit, сделать изменения в теме с помощью style.css это близко и знакомо (пусть и не всегда получается). Делаю так:
1. Изменяю форму комментирования в style.css (цель — нужно сделать как у вас)
2. Вижу — изменения есть, но изменяется также и форма входа в аккаунт (а нам так и пока этого не надо)
т.е. этот стиль (в моем случае, который я изменяю, — form) зацепляет и форму входа в аккаунт.
Порыскаю еще в коде, хотелось бы добить форму, у Вас же получилось (может создать свой стиль, но куда его лепить?). Спасибо, такие дела, будет время черкните. (со второй частью задачи, когда надо закомментировать код, отвечающий за вывод формы для ввода домашней страницы, разбираюсь, у меня пока не работает). Но исправно работает, все что было предложено в этом посте ранее.

zax,

Вижу — изменения есть, но изменяется также и форма входа в аккаунт

Здесь надо идти в сторону наследования селекторов классов и идентификаторов. К сожалению, ничем помочь не могу, т. к. CSS знаю не идеально, и выдать в комментарии код, который точно заработает, не получится. Последний раз и не вспомнить, когда верстал, да и верстаю по большей части "методом тыка".

когда надо закомментировать код, отвечающий за вывод формы для ввода домашней страницы, разбираюсь, у меня пока не работает)

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

хотелось бы добить форму, у Вас же получилось

Если хочется в точности как у меня, то можно посмотреть мои стили.
tulvit.ru/themes/tulvit/style.css
Однако, сразу хочется предупредить. Эти стили скорее урок, как не надо верстать, т. к. куча ошибок и вообще мешанина (код писался и дописывался много раз, логики там практически нет, т. е. каждый кусок кода эта попытка по быстрому решить возникшую проблему). Впрочем, все работает, даже кроссбраузерно.

А какой у вас сейчас модуль стоит? Что-то капчи не видно.

Mike, hashcash. Однако у него изредка довольно странное поведение, связанное видимо с кэшированием, причем еще зависит от браузера (что странно). В подробности особо не вдавался, но обычно проблема решается установкой и настройкой модуля boost, хотя если на сайте планируется маленький трафик, то нагружать сайт модулем расширенного кэширования только ради безкапчевой регистрации и прочего как-то излишне, как на мой взгляд.

Но все-таки пока погрешность присутствует (с модулем boost в том числе), некоторый процент пользователей не может пройти эту защиту из-за багов и конфликтов с кэшированием (на этом блоге в том числе - один раз комментарий к посту мне отправили сразу на почту, аргументировав тем, что не могут оставить на блоге).

На сайтах, где такая погрешность непозволительна (каждый пользователь - потенциальный клиент и пришел на сайт не через поиск, а скажем по устной рекомендации, и скорее всего совершенно не шарит в компах), на форму регистрации ставлю по старинке обыкновенную капчу. Сначала математическую (2 + 3 = ?), потом какую-нибудь другую, если математическая начинает пробиваться. Дефолтные настройки автоспамеров не проходят мат. капчу, но некоторые затачивают свои скрипты именно под спам Друпала, поэтому математическая капча хороша до тех пор, пока сайт не попал в базы этих друпал-спамеров).

Во всех других случаях, где каждый пользователь не на вес золота и некоторую погрешность можно себе позволить (те же пользователи с отключенным JS), стараюсь использовать hashcash. Перепробовал фактически все модули защиты от спама, но альтернативы ему не нашел, либо видимая капча, либо неработающие решения (скрытые поля - пробиваются), либо использование сторонних сервисов.

Еще как вариант защиты от спама в комментариях можно использовать обязательный предпросмотр, боты вроде на этом почти всегда спотыкаются.

Ясно, спасибо за такой развернутый ответ. Попробую поставить все-таки hashcash. А модуль NotCaptcha не пробовали?

Что-то не смог найти NotCaptcha в официальных модулях Друпала. Это вроде там где надо картинки разворачивать... Ну не знаю, как-то не серьезно, что ли =)

PS
А математическая капча уже сразу начинает пробиваться, только вчера на одном сайте поставил, уже 3 непонятных странных юзера зарегистрировалось, хотя еще с полгода назад спам не проходил. Возможно, в хрумере или чем там спамят уже по дефолту идет распознавание Друпала.