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

Материал из Umicms
Перейти к:навигация, поиск
 
(не показано 9 промежуточных версий 4 участников)
Строка 1: Строка 1:
 
[[category:Вопросы и уроки разработки сайтов на UMI.CMS]]
 
[[category:Вопросы и уроки разработки сайтов на UMI.CMS]]
 
+
'''Актуально для версии 18.'''
'''Актуально для версии 17 84088'''
 
  
 
Начиная с 16 версии в UMI.CMS появились [[http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/manifesty/ манифесты]].
 
Начиная с 16 версии в UMI.CMS появились [[http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/manifesty/ манифесты]].
Строка 9: Строка 8:
 
Например, сам модуль будет называться mailer.
 
Например, сам модуль будет называться mailer.
 
Структура файлов у нас будет следующая:
 
Структура файлов у нас будет следующая:
 
+
<source lang="php">
 
/classes/components/mailer/manifest/install.xml
 
/classes/components/mailer/manifest/install.xml
 
/classes/components/mailer/manifest/update.xml
 
/classes/components/mailer/manifest/update.xml
 
/classes/components/mailer/manifest/actions/SendMail.php
 
/classes/components/mailer/manifest/actions/SendMail.php
 
+
</source>
 
В файл install.xml мы добавим следующий код:
 
В файл install.xml мы добавим следующий код:
 
<source lang="xml">
 
<source lang="xml">
Строка 99: Строка 98:
  
 
После этого вызываем файл 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, манифесты выполняются вручную и отображаются на экране.