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

Это не очень удобно. Именно поэтому я очень редко отвечал посетителям на комментарии в этом виджете, так как просто не знал об их появлении.
Но теперь всё изменится! Давайте сделаем уведомления на электронную почту о новых комментариях в виджете.
На самом деле всё просто. При отправке комментария виджет передаёт событие widgets.comments.new_comment. Подпишемся на это событие и выполним свой код, а именно отправку сообщения на электронную почту.
Стандартный код для вставки виджета на страницу выглядит так:
<div id="vk_comments"></div> <script type="text/javascript"> VK.Widgets.Comments('vk_comments'); </script>
Изменим его, добавив подписку на событие, используя VK.Observer:
<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:
<?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, звёздочки замените на свои данные:
<?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 ); ?>
Архив со всеми файлами можно скачать в конце статьи. Папку закидываем в корень сайта. После этого пробуем оставить комментарий в виджете. На почту сразу должно свалиться письмо примерно такого содержания:
Ну и на всякий случай отключим индексирование нашего файла в robots.txt:
Disallow: /commentnotify/*