
Плагин - хитрый болт с левой резьбой
Как известно, в MODx есть возможность создавать свои плагины к CMS, но многие игнорируют этот мощный инструмент, даже те, кто уже вовсю использует самописные сниппеты. Между тем, создание плагина – такой же простой процесс, как написание сниппета. Сегодня мы потренируемся в этом, а заодно положим в свою библиотеку одну чертовски полезную штуку.
Итак, плагины. Собственно, ничего хитрого в них нет. Как и сниппеты, они создаются в менеджере CMS, закладка «Управление->Элементы->Плагины».
Лично мне часто недоставало возможности получить из кода какие-то данные, не выводя их в браузер. Типичный случай – работа на production-сервере, когда пугать клиента выводом дампов крайне нежелательно. Значит, данные нужно доставлять напрямую к нам, минуя возможность их попадания к кому-то постороннему.
Я использую интернет-пейджер QIP – по-моему, это достойный кандидат на то, чтобы стать клиентом нашего плагина на сервере. Он поддерживает несколько разных протоколов. ICQ я по понятным причинам проигнорировал, а вот Jabber – то, что надо. В него мы и будем слать отчеты из CMS.
Создаем новый плагин, называем его, к примеру, «SendDataFromMODx». Вносим в плагин следующий текст:
/* Initialize parameters */ 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->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 ( [username] => mywebusername [userpassword] => mypassword [rememberme] => 0 ) )
У меня это означает, что плагин отслеживает событие «OnBeforeWebLogin» и система сообщила, что на сайт попытался зайти пользователь «mywebusername» с паролем «mypassword». Точно также приходят сообщения и об остальных событиях.
Для сообщений я рекомендую завести отдельный эккаунт, чтобы не светить свой пароль на чужом сайте. Я воспользовался сервисом jabber.ru.
Даже странно, что такой удобной фичи нет в MODx по умолчанию. Применений множество – отчеты о создании бэкапа, предупреждения о попытках входа в админку, отладка кода, коммуникации с посетителями. Больше всего мне нравится реакция клиента, который оставляет на сайте вопрос, а через несколько секунд получает телефонный звонок с ответом. Приятно делать приятное людям. Надеюсь, сделал приятно и вам.
Если у вас появились вопросы - пишите, я постараюсь ответить быстро ;)
Автор статьи: Александр Поляков, lecosson@mail.ru



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