Пример написания манифеста для модуля
Актуально для версии 17 84088
Начиная с 16 версии в UMI.CMS появились [манифесты].
В данной статье мы покажем пример написания манифеста, который при установке и обновлении модуля присылает письмо на определенную почту.
Например, сам модуль будет называться mailer. Структура файлов у нас будет следующая:
/classes/components/mailer/manifest/install.xml /classes/components/mailer/manifest/update.xml /classes/components/mailer/manifest/actions/SendMail.php
В файл install.xml мы добавим следующий код:
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<route>
<transaction name="send_mail_on_install">
<action name="\UmiCms\Manifest\Mail\SendMail" />
</transaction>
</route>
</manifest>
В файл update.xml добавляем код:
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<route>
<transaction name="send_mail_on_update">
<action name="\UmiCms\Manifest\Mail\SendMail" />
</transaction>
</route>
</manifest>
В файл SendMail.php добавим:
<?php
namespace UmiCms\Manifest\Mail;
class SendMailAction extends \Action
{
public function __construct($name, array $params = []) {
parent::__construct($name, $params);
}
public function execute()
{
$lMail = new \umiMail;
$lMail->addRecipient("recipient@example.com", "Testing");
$lMail->setFrom("from@example.com", "Testing");
$lMail->setSubject("Обновление CMS");
$lMail->setPriorityLevel("highest");
$lMail->setContent("Обновление завершено");
$lMail->commit();
$lMail->send();
return $this;
}
public function rollback()
{
return $this;
}
}
В данном файле в строке
$lMail->addRecipient("recipient@example.com", "Testing");
recipient@example.com необходимо заменить на адрес получателя, а в строке
$lMail->setFrom("from@example.com", "Testing");
from@example.com заменить на заголовок From письма.
Если модуль не добавлен к лицензионному ключу и не размещен на UMI.Market, то при установке и обновлении запуск манифестов происходить не будет.
Для проверки работы манифестов их нужно запускать вручную.
Для этого создадим файл manifest_checker.php в корне сайта и добавим в него следующий код:
<?php
include 'standalone.php';
$manifest = \UmiCms\Service::ManifestFactory()
->createByModule('update', ‘mail’);
do {
$manifest->execute();
} while (!$manifest->isReady());
foreach ($manifest->getLog() as $message) {
echo $message, PHP_EOL;
}
Первый аргумент в методе createByModule это тип манифеста (install или update), а второй аргумент — имя вашего модуля.
После этого вызываем файл example.com/manifest_checker.php, манифесты выполняются вручную и отображаются на экране.