Модуль 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 аватар

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

Ответить на комментарий | SolarWind Gate. Заметки гика

top eleven cheats For ipad аватар

Everyone loves whzt you guys are usually up too.
Such clever work and reporting! Keep up thhe amazing
works guys I've added you guys to our blogroll.

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 админа, который уж точно имеет все права. В принципе, можно закоментировать всю строчку, ибо в раздел администрирования все равно может попасть только админ.

Xorauguynahyalb

Demaemiainlcrim аватар

Geastydaype xaikalitag urgergime http://usillumaror.com - iziananatt Maikeaffodo http://gussannghor.com ErroryInsassy

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

Содержание этого поля является приватным и не предназначено к показу. Если у вас есть аккаунт в Gravatar, он будет использован для показа вашей аватарки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.