Пример написания манифеста для модуля — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 100: Строка 100:
  
 
[[Категория:API]] [[Категория:Написание кастомных макросов]]
 
[[Категория:API]] [[Категория:Написание кастомных макросов]]
 +
[[Категория:Модуль Пользователи]][[Категория:Написание кастомных макросов]]

Версия 08:41, 31 мая 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, манифесты выполняются вручную и отображаются на экране.