Добавляем уведомления виджету комментариев VK

Есть такая замечательная штука как виджет комментариев VK для сайтов. И у меня на сайте он есть наравне с обычными комментариями. Но есть у виджета и очень большой минус: уведомления о комментариях администратору никуда не приходят и для того чтобы их посмотреть нужно заходить на любую страницу сайта и нажимать ссылку «Администрирование».
vk_widget
Это не очень удобно. Именно поэтому я очень редко отвечал посетителям на комментарии в этом виджете, так как просто не знал об их появлении.
Но теперь всё изменится! Давайте сделаем уведомления на электронную почту о новых комментариях в виджете.

На самом деле всё просто. При отправке комментария виджет передаёт событие widgets.comments.new_comment. Подпишемся на это событие и выполним свой код, а именно отправку сообщения на электронную почту.
Стандартный код для вставки виджета на страницу выглядит так:
1
2
3
4
<div id="vk_comments"></div>
<script type="text/javascript">
 VK.Widgets.Comments('vk_comments');
</script>

Изменим его, добавив подписку на событие, используя VK.Observer:

1
2
3
4
5
6
7
8
9
10
11
<div id="vk_comments"></div>
<script type="text/javascript">
VK.Widgets.Comments("vk_comments");
VK.Observer.subscribe("widgets.comments.new_comment", function f(num, last, date, hash)
{
  var xmlHttp = new XMLHttpRequest();
  var params = 'num=' + encodeURIComponent(num) + '&last=' + encodeURIComponent(last) + '&date=' + encodeURIComponent(date) + '&hash=' + encodeURIComponent(hash) + '&url=' + encodeURIComponent(window.location) + '&title=' + encodeURIComponent(document.title);
  xmlHttp.open( "GET", "http://example.com/commentnotify/notifyme.php?"+params, false );
  xmlHttp.send( null );
});
</script>
В восьмой строке замените имя домена на своё.
Итак, мы получили все необходимые данные и отправили их скрипту /commentnotify/notifyme.php . Напишем теперь его.
Для отправки сообщения на электронную почту используем PHPMailer:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
  include("./config.php");
  include("./smtpmail.php");
  if ( (!isset($_GET['num'])) || (!isset($_GET['last'])) || (!isset($_GET['date'])) || (!isset($_GET['hash'])) || (!isset($_GET['url'])) || (!isset($_GET['title'])) )
  {
    die();
  }
  $num = urldecode($_GET['num']);
  $comment = urldecode($_GET['last']);
  $date = urldecode($_GET['date']);
  $hash = urldecode($_GET['hash']);
  $url = urldecode($_GET['url']);
  $title = urldecode($_GET['title']);
 
  smtpmail("username@example.com", 
    "Новый комментарий на вашем сайте", 
    "Кто-то оставил новый комментарий на вашем сайте в виджете VK.\nСтраница: $title\n$url\n\nТекст комментария:\n".$comment);
?>
В функции smtpmail необходимо прописать адрес, на который слать уведомления, заголовок письма и его текст.
Осталось указать настройки для SMTP сервера с которого мы будем отправлять сообщения. Это сделаем в файле config.php, звёздочки замените на свои данные:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$__smtp = array(
    "host" => "*****************", //smtp сервер
    "debug" => 0,                   //отображение информации дебаггера (0 - нет вообще)
    "auth" => true,                 //сервер требует авторизации
    "port" => 25,                    //порт (по-умолчанию - 25)
    "username" => "******************", //имя пользователя на сервере
    "password" => "******************", //пароль
    "addreply" => "******************", //ваш е-mail
    "replyto" => "******************" //e-mail ответа, будет указан в поле Reply-to
    //Обычно username, addreply и replyto - одно и то же, вида username@mailserver.ru
);
?>
Архив со всеми файлами можно скачать в конце статьи. Папку закидываем в корень сайта. После этого пробуем оставить комментарий в виджете. На почту сразу должно свалиться письмо примерно такого содержания:

vk-comment-notify
Ну и на всякий случай отключим индексирование нашего файла в robots.txt:

Disallow: /commentnotify/*

Похожие записи:

8 Комментарии “Добавляем уведомления виджету комментариев VK

    1. Это отличная мысль! Почему по умолчанию этого нельзя было сделать непонятно!
      НО!
      Нельзя ли сделать без использования PHP?
      Просто у меня есть пара сайтов, где нет и не предвидится php.
      Перенести сайт нельзя…
      Спасибо!

        1. Уже разобрался… просто передаем на другой сайт где есть php, все прекрасно работает…
          Просто никогда не сталкивался с яваскриптами, а самый лучший мотиватор — необходимость… 🙂

  1. Отличная статья! Спасибо! Применил для своего сайта!
    НО!
    В файле notifyme.php
    2 и 3 строчка не нужны…
    include(«./config.php»);
    include(«./smtpmail.php»);
    и файлы не нужны… упростите код, либо напишите, как альтернативу… а smtpmail, замените на mail.
    Можно конечно еще добавить шапки, но это уже декорирование…

    1. Нужны, так как используется сторонняя библиотека smtpmail. Config делаю по привычке всегда во всех проектах. Для подключения одного файла конфигурации из разных скриптов. Smtpmail проще в использовании. Не на всех хостингах можно mail настроить.

      1. Как же Smtpmail проще если нужно создавать дополнительный файл, и что-то там прописывать, либо просто написать mail (адрес…), может у кого-то не работает, слава Зевсу у меня работает…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *