Как известно, в MODx есть возможность создавать свои плагины к CMS, но многие игнорируют этот мощный инструмент, даже те, кто уже вовсю использует самописные сниппеты. Между тем, создание плагина – такой же простой процесс, как написание сниппета. Сегодня мы потренируемся в этом, а заодно положим в свою библиотеку одну чертовски полезную штуку.
Итак, плагины. Собственно, ничего хитрого в них нет. Как и сниппеты, они создаются в менеджере CMS, закладка «Управление->Элементы->Плагины».
Лично мне часто недоставало возможности получить из кода какие-то данные, не выводя их в браузер. Типичный случай – работа на production-сервере, когда пугать клиента выводом дампов крайне нежелательно. Значит, данные нужно доставлять напрямую к нам, минуя возможность их попадания к кому-то постороннему.
Я использую интернет-пейджер QIP – по-моему, это достойный кандидат на то, чтобы стать клиентом нашего плагина на сервере. Он поддерживает несколько разных протоколов. ICQ я по понятным причинам проигнорировал, а вот Jabber – то, что надо. В него мы и будем слать отчеты из CMS.
Создаем новый плагин, называем его, к примеру, «SendDataFromMODx». Вносим в плагин следующий текст:
<?php
/* Initialize parameters */
if (!isset ($jab_server)) { $jab_server = 'server'; }
if (!isset ($jab_user)) { $jab_user= 'login'; }
if (!isset ($jab_password)) { $jab_password= 'password'; }
if (!isset ($www_root_path)) { $www_root_path = '/home/htdocs/mysite/www/'; }
if (!class_exists('XMPPHP_XMPP')) {
require_once $www_root_path.'assets/lib/XMPPHP/XMPP.php';
}
$conn = new XMPPHP_XMPP($jab_server, 5222, $jab_user, $jab_password, 'xmpphp', $jab_server, $printlog=false, $loglevel=XMPPHP_Log::LEVEL_ERROR);
try {
$e =& $modx->event;
$msg =$e->name;
ob_start();
array_splice($e->params,0,3);
print_r ($e);
$dump = ob_get_contents();
ob_end_clean();
$msg.="\n".$dump;
$conn->connect();
$conn->processUntil('session_start');
$conn->presence();
$conn->message('myusername@qip.ru', $msg);
$conn->disconnect();
} catch(XMPPHP_Exception $em) {
die($em->getMessage());
}
?>
Что делает этот плагин? Во-первых, задаются Jabber-сервер, пользователь и пароль, через которые будут отправляться сообщения, а также директория, в которой лежит класс для подключения к этому серверу. Во-вторых, подключается класс XMPPHP_XMPP для отправки сообщений. В-третьих (строка $conn = new ….) создается подключение к серверу. И наконец ($conn->message('myusername@qip.ru', $msg);) сообщение отправляется нужному пользователю, то есть вам.
Работа будет удобнее, если на закладке конфигурации плагина вы внесете в параметры такой текст:
&jab_server=XMPP server;string;jabber.ru &jab_user=User name;string;username &jab_password=Password;string;userpassword
Это позволит удобнее настраивать параметры подключения. Сам класс XMPPHP_XMPP можно легко найти в интернете.
Если вы обратили внимание на то, какие именно данные отправляются, то вы уже поняли, что придет в ваш Jabber-клиент. В зависимости от того, какие события вы активировали в плагине, (закладка «Системные события»), сообщения могут отличаться, но в целом они выглядят примерно так:
OnBeforeWebLogin
SystemEvent Object
(
[name] => OnBeforeWebLogin
[_propagate] => 1
[_output] =>
[activated] =>
[activePlugin] => SendDataFromMODx
[params] => Array
(
[username] => mywebusername
[userpassword] => mypassword
[rememberme] => 0
)
)
У меня это означает, что плагин отслеживает событие «OnBeforeWebLogin» и система сообщила, что на сайт попытался зайти пользователь «mywebusername» с паролем «mypassword». Точно также приходят сообщения и об остальных событиях.
Для сообщений я рекомендую завести отдельный эккаунт, чтобы не светить свой пароль на чужом сайте. Я воспользовался сервисом jabber.ru.
Даже странно, что такой удобной фичи нет в MODx по умолчанию. Применений множество – отчеты о создании бэкапа, предупреждения о попытках входа в админку, отладка кода, коммуникации с посетителями. Больше всего мне нравится реакция клиента, который оставляет на сайте вопрос, а через несколько секунд получает телефонный звонок с ответом. Приятно делать приятное людям. Надеюсь, сделал приятно и вам.
Если у вас появились вопросы - пишите, я постараюсь ответить быстро ;)
Автор статьи: Александр Поляков, lecosson@mail.ru
Комментарии (0)