Модуль Comment Notify в Drupal 5.x

Думаю, практически в каждом блоге, посвещенном IT-тематике, рано или поздно всплывает тема CMS, на которой он основан. Я не исключение. Поэтому напишу решение одной из проблем в Drupal, с которой я столкнулся. Интересно только "друпалерам".

Захотел я прикрутить к сайту отсылку комментариев для зарегистрированных и анонимных пользователей на почту. Примерно так, как это сделано в LiveJournal. Выяснилось, что модуль Comment Notify для реализации этого функционала находится в стадии dev (разработка). Что само по себе странно. Ни за что не поверю, что такая возможность не востребована.

После установке модуля обнаружилось, что у меня он работает крайне криво. Во первых, письма отсылаются не от email, прописанном в настройках сайта, а от системного email типа root@номер_площадки.название_хостера.ру. Во вторых, при ответе на комментарии пользователь получал кучу предупреждений вида:

* user warning: Table 'comments' doesn't exist query: update comments set notify = 0 where cid = 40 in database.mysql.inc on line 172.
* warning: array_merge() [function.array-merge]: Argument #2 is not an array in common.inc on line 1940.
* warning: Invalid argument supplied for foreach() in common.inc on line 1971.
* warning: array_merge() [function.array-merge]: Argument #2 is not an array in common.inc on line 1940.
* warning: Invalid argument supplied for foreach() in common.inc on line 1971.
* warning: array_merge() [function.array-merge]: Argument #2 is not an array in common.inc on line 1940.
* warning: Invalid argument supplied for foreach() in common.inc on line 1971.

Хочу сразу сказать спасибо участникам проекта drupal.ru. Меня направили в нужном направлении.

Но для решения проблемы понадобились навыки программирования. Потому что в модуле я обнаружил следующие баги:

  • Один из SQL-запросов был составлен без учета префиксов таблиц. В случае, если префиксы не используются, все проходит нормально. Но у меня они как раз используются. Исправил.
  • Вызов функции для генерации email происходил с передачей неинициализированного массива. Вообще говоря, мои скудные познания PHP говорят мне, что такая конструкция по идее должна бы работать. Возможно, дело в особенностях конкретной сборки PHP у хостера. В любом случае, принудительная инициализация массива, которую я добавил, лишней не будет. В результате письма стали генерироваться с правильным email и исчезли предупреждения, связанные с массивом.

В общем, в итоге все вроде заработало. Уведомления о комментариях рассылаются.

Если кому-нибудь нужно, то доработанный модуль comment_notify находится в приложении к этому посту.

Прикрепленный файлРазмер
comment_notify-5.x-1.x-dev-solarwind.zip31.88 КБ

Комментарии

По ходу, когда

Bokudzu аватар

По ходу, когда мне от admin (at) solargate.ru пришло уведомление о новых комментариях, Gmail воспринял письмо как спам.

Очень странно.

SolarWind аватар

Очень странно. Странно, потому что у меня тоже гмыл и письма проходят нормально. С письмами о регистрации есть такие проблемы - действительно в спам отправляет. Но шаблон письма о регистрации я переформулирую...

Аналогичная

Mice аватар

Аналогичная ситуация.
Я думаю, что это нормально. По моему опыту, письма, сформированные скриптами на многих форумах и прочих сайтах превентивно размечаются мейлерами как спам. Пометил письмо как "не спам", полагаю, последующие письма будут правильно восприняты.
___________________________________________________
freelib.ru - свобода выбора для читателей электронных книг :)

В том то и дело,

SolarWind аватар

В том то и дело, что как минимум человек 5 отметили эти письма как не спам. Но они все равно туда сыпятся. Ну да ладно. Я пока вообще отменил подтверждение регистрации по емылу. А потом что-нибудь придумаю.

А вот и нет. Мне

Mice аватар

А вот и нет.
Мне уведомление о новом комменте свалилось уже совершенно нормально. :)
Я пользуюсь клиентами, которым уж если сказано, что это "не спам" - никогда больше в спам письмо не закинут. Нормальная реализация технологии whitelist...
___________________________________________________
freelib.ru - свобода выбора для читателей электронных книг :)

Re: А вот и нет.Мне

Дмитрий Игошин аватар

Простите за офтоп...но эти молоточки из Стены Пинк Флойд? -)

Re: А вот и нет.Мне

Mice аватар

Из неё, конечно. :)
В нормальном качестве не нашёл, потому отрисовал в "иллюстраторе".

Re: А вот и нет.Мне

burnis аватар

Здорово что кто-то еще помнит этот чудный мюзикл, эту суперскую группу -)

Re: А вот и нет.Мне

SolarWind аватар

Ну это уже классика, про них помнят. :-)

Re: А вот и нет.Мне

Mice аватар

Роджер Уотерс - для меня любимый исполнитель и автор музыки и текстов.

Re: Аналогичная

imprezy integracyjne аватар

Thanks for the information

Re: Модуль Comment Notify в Drupal 5.x

Дмитрий Игошин аватар

хм, поставил..и оригинальный модуль comment_notify-5.x-1.3.tar.gz
и ваш попробовал
что-то ни от того..ни от этого уведомления не приходят -(
где то настролил что-то неправильно?

в любом случае человеческое спасибо за доработку

Re: Модуль Comment Notify в Drupal 5.x

SolarWind аватар

А email в свойствах сайта прописан? Ошибки какие-нибудь пишет?

Re: Модуль Comment Notify в Drupal 5.x

burnis аватар

прописан.
скорее всего я где-то галочку не поставил -)

Re: Модуль Comment Notify в Drupal 5.x

SolarWind аватар

Там еще у пользователя должна в профиле галочка стоять для получения емылов.
А какой хостинг, кстати? Может в нем дело? Потому что странно, должно работать. Вы же получаете с моего блога уведомления о каментах сейчас?

Re: Модуль Comment Notify в Drupal 5.x

BURNIS аватар

хостинг www.knutov.net
с хостингом все норм.
мне ведь приходят уведомления о забытом пароле к примеру -)

а вот галочку ставил..проверял.
пробовал зайти просто с другого браузера и сам прокоментировать..и посмотреть за результатом
ничего не пришло..

с этого сайта мне приходят уведомления.
только почему-то в двойном размере.

Re: Модуль Comment Notify в Drupal 5.x

SolarWind аватар

Странно, конечно. Ну тогда надо отлаживать по коду...

Re: Модуль Comment Notify в Drupal 5.x

Роман Седых аватар

А вы случаем не забыли comment.module для модуля comment заменить? :)

- replace the comment.module with the file comment.module.dp5
(and please VOTE here http://drupal.org/node/156475
for getting the comment.module fixed in Drupal 6 or 7 finally)

Re: Модуль Comment Notify в Drupal 5.x

SolarWind аватар

Кстати, да. Этот модуль действительно требует замены comment.module. Я и запамятовал уже...

Re: Модуль Comment Notify в Drupal 5.x

Гость аватар

А может быть вы подскажете, как:
а) убрать тему в комментариях;
б) заставить поля комментариев сохранять введённое имя, мыло, хоумпейдж.
А то drupal.ru лежит сегодня, а ночь длинна.

Re: Модуль Comment Notify в Drupal 5.x

Роман Седых аватар

Ну вот видите. О чем писал, то и забыл.
Ещё у вас таб перескакивает на кнопки форматирования - жуть как не удобно. :(

Re: Модуль Comment Notify в Drupal 5.x

SolarWind аватар

>Ну вот видите. О чем писал, то и забыл.

Ну так вопрос то был задан почти через два месяца после того, как я пост написал. ;-) Я уже модуль у себя настроил и забыл про него. Работает и ладно. ;-)

>Ещё у вас таб перескакивает на кнопки форматирования - жуть как не удобно. :(

Не совсем понял - где именно перескакивает?

Re: Модуль Comment Notify в Drupal 5.x

Роман Седых аватар

Мда, бывает. На дату я совсем не смотрел. :)

А если из поля темы табнуться, то попадаешь не в поле с комментарием, а на иконки форматирования текста.

Re: Модуль Comment Notify в Drupal 5.x

SolarWind аватар

>А если из поля темы табнуться, то попадаешь не в поле с комментарием, а на иконки форматирования
>текста.

А, да, есть такое дело. У меня BUEditor в качестве редактора прикручен. Походу, это особенность его реализации. Так с лету я даже не знаю, как пофиксить. Но поковыряю его на эту тему...

TAB - это же просто...

Гость аватар

Так это же очень просто - последовательность перехода по форме-то задать.

Ключевое слово tabindex="3" - при нажатии на TAB курсор перепрыгивает по порядку номеров. Сначала номер 1, потом 2, потом 3 и тд, хотя распологатся они могут как угодно - хоть в порядке 3 2 1 - тогда при табе форма начнет заполнятся с низу вверх.

Все поняли?

Re: Модуль Comment Notify в Drupal 5.x

SolarWind аватар

Насчет темы в комментариях - это устанавливается в админке, Управление сайтом -> Содержание -> Комментарии -> Настройка. Там есть соответствующий пункт.

А по поводу запоминания полей - есть такой модуль. Не помню, как называется. На drupal.org я точно видел. Посмотрю еще, вспомню и отпишу.

Re: Модуль Comment Notify в Drupal 5.x

Роман Седых аватар

Чтобы тему надежно похерить (не только из формы ответа, а вообще), лучше использовать следующий скрипт: http://drupal.ru/files/remover.zip Там только надо раскамментить нужное вам.

Re: Модуль Comment Notify в Drupal 5.x

Аня аватар

б) заставить поля комментариев сохранять введённое имя, мыло, хоумпейдж.

http://drupal.org/project/comment_info делает это

Re: Модуль Comment Notify в Drupal 5.x

Ярик аватар

Спасибо за пост... только что я уже не пробывал, не могу всё равно настроить :(
прозьба, вы бы не могли мне рассказать как именно менять comment.module, где он ваще находится.. и что это такое?

Заранее благодарен :)

Re: Модуль Comment Notify в Drupal 5.x

SolarWind аватар

comment.module находится в /modules/comment. Этот файл нужно заменить на тот, который входит в состав comment_notify.

Re: Модуль Comment Notify в Drupal 5.x

Ярик аватар

На сколько я вас правильно понял, в /modules/comment нужно заменить файл comment.module на файл comment_notify.module ? ведь в состав comment_notify именно он входит?.. или его нужно переименовать?

Заранее благодарен :)

Re: Модуль Comment Notify в Drupal 5.x

SolarWind аватар

Нет, не так. В состав пакета comment_notify входит файл comment.module.dp5. Его нужно переименовать в comment.module и записать вместо comment.module в /modules/comment. А все остальное от comment_notify закинуть в /modules/comment_notify.

Re: Модуль Comment Notify в Drupal 5.x

Гость аватар

Спасибо огромное :) кажись заработало :)

Re: Модуль Comment Notify в Drupal 5.x

Турист аватар

Я вот все думаю на чем делать новый сайт. Склоняюсь к друпалу.
Что-то смотрю у народа большие вопросы вызывает. Это плохо.

Re: Модуль Comment Notify в Drupal 5.x

SolarWind аватар

Вопросы возникают, потому что у друпала действительно достаточно высокий порог вхождения. Это не так CMS, которую за 5 минут поставил и все заработало именно так, как нужно. Зачастую требуется некоторое понимание основных принципов как минимум. Но это следствие исключительной гибкости системы. Сделать на нем можно все, что угодно. Чем меня друпал и радует.

Re: Модуль Comment Notify в Drupal 5.x

Алексей Королев аватар

А новая версия такими же багами обладает?

Re: Модуль Comment Notify в Drupal 5.x

SolarWind аватар

Не знаю, я новую версию не смотрел...

Re: Модуль Comment Notify в Drupal 5.x

Sergey аватар

SolarWind, спасибо за подробную инструкцию. Тоже не мог ранее решить проблему, сейчас поставил, всё работает :)

Re: Модуль Comment Notify в Drupal 5.x

Айнур аватар

Привет,

я запарился устанавливать этот модуль, пока разобрался, что к чему, как делать патчи, как что, семь потов сошло :)
В общем, установил оригинальный модуль, вроде бы в настройсках сайта он как положено активирован, галочки везде стоят, но
1) уведомления так и не приходят
2) после того, как отправляешь комментарий, не появляется страница с комментарием, который оставил, а просто пустое окно. Таже фигня возникает и когда удаляю комментарий.

В чем может быть проблема? Спасибо!

Re: Модуль Comment Notify в Drupal 5.x

SolarWind аватар

А у вас какой друпал? Может из-за версии что-то не работает. Я делал этот модуль еще для друпала 5.2 вроде бы...

Re: Модуль Comment Notify в Drupal 5.x

Айнур аватар

5.7, вроде бы.

Оказывается уведомления по мылу таки работают. Вот только 2-я проблема остается: сделав запись в блоге или оставив коммент - возникает лишь пустое окно, хотя сама запись появляется.
Я и не ваш модуль ставил а тот, который нашел на друпал.орг или друпалер.ру

Re: Модуль Comment Notify в Drupal 5.x

Alex7 аватар

После установки модуля Comment Notify (Drupal 6) с зарегистрированными пользователями все нормально, а вот с анонимными проблема - нету поля “Имя”, “E-mail” и соответственно “Уведомлять меня по email о новых комментариях”

Помогите советом, где нужно активировать необходимые настройки, что бы было к примерно так же как здесь.

Re: Модуль Comment Notify в Drupal 5.x

Alex7 аватар

Проблема частично решена - опцию (галочку) нашел в типе материалов, все появилось даже больше чем нужно.

В этой связи есть еще несколько пожеланий.

1. Как корректно убрать поле “Домашняя страница” от псевдокоментаторов, тем более у меня установлен модуль http://drupal.org/project/blockanonymouslinks который блокирует все ссылки в поле “Комментарий”

2. Как сделать галочку “Уведомлять меня по e-mail о новых комментариях” по умолчанию не отмеченной. Мне кажется это будет более логично, кому надо подписаться тот ее отметит.

Re: Модуль Comment Notify в Drupal 5.x

SolarWind аватар

1. С этим даже не знаю, не разбирался. Вообще вроде был для этого готовый модуль, но я не помню его названия.

2. Я бы посмотрел в исходниках модуля comment_notify. Там в описании формы (хук form_alter скорее всего) поменять дефолтный true на false у соответствующего пункта. Говорю сейчас навскидку, исходники не смотрел, но скорее всего где-то там оно и есть.

Модуль Comment Notify в Drupal 6.x

Андрей аватар

Возможно, это кому то поможет...

При установке comment_notify-6.x-1.4 на drupal 6.x в разделе "администрирование-установки сайта-уведомления о комментариях" могут возникать ошибки:

* warning: array_fill() [function.array-fill]: Number of elements must be positive in D:\WEB\www\freeyourself\htdocs\includes\database.inc on line 253.
* warning: implode() [function.implode]: Bad arguments. in D:\WEB\www\freeyourself\htdocs\includes\database.inc on line 253.
* warning: array_keys() [function.array-keys]: The first argument should be an array in D:\WEB\www\freeyourself\htdocs\modules\user\user.module on line 502.
* user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 query: SELECT p.perm FROM role r INNER JOIN permission p ON p.rid = r.rid WHERE r.rid IN () in D:\WEB\www\freeyourself\htdocs\modules\user\user.module on line 502.

Причина ошибки:

При определенном условии форма администрирования данного модуля пытается сделать запись в системный лог. Для этого модуль использует права "пользователя по умолчанию" (uid=0). Зачем они это так делают - фиг знает. Но если пользователя с uid=0 в базе нет, то выскакивают эти ошибки.

Пользователя с uid=0 мне пришлось удалить при переносе сайта на хостинг, т.к. поле uid автоинкрементальное и может начинаться с 1. При попытке вставить запись с uid=0 sql-скрипт падает с ошибкой. С счел, что нулевой пользователь не нужен, т.к. у него все остальные поля пустые, и попросту удалил его.

Как исправить:

Найти в файле comment_notify.module в коде функции comment_notify_settings() следующий фрагмент:

if (isset($enabled_types[$type]) && $enabled_types[$type] && variable_get('comment_anonymous_'. $type, COMMENT_ANONYMOUS_MAYNOT_CONTACT) == COMMENT_ANONYMOUS_MAYNOT_CONTACT) {
$account = user_load(array('uid' => 0));
...

я просто заменил
'uid' => 0
на
'uid' => 1
это id админа, который уж точно имеет все права. В принципе, можно закоментировать всю строчку, ибо в раздел администрирования все равно может попасть только админ.

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

Содержание этого поля является приватным и не предназначено к показу. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.