Пример написания манифеста для модуля — различия между версиями
| Whoa (обсуждение | вклад) | Kublan (обсуждение | вклад)  | ||
| Строка 99: | Строка 99: | ||
| После этого вызываем файл example.com/manifest_checker.php, манифесты выполняются вручную и отображаются на экране. | После этого вызываем файл example.com/manifest_checker.php, манифесты выполняются вручную и отображаются на экране. | ||
| − | [[ | + | [[category:API]][[category:Написание кастомных макросов]] | 
Текущая версия на 13:10, 28 июня 2018
Актуально для версии 18.
Начиная с 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, манифесты выполняются вручную и отображаются на экране.
