Шаблоны сообщений

Материал из ISPWiki
Перейти к: навигация, поиск

Перед отправкой уведомления BILLmanager генерирует XML документ. Данный документ содержит различную полезную информацию: о клиенте, его услугах, сервере и т.д.

Есть два способа составления на основании этого документа итогового письма в HTML формате: EJS и XSLT. Выбор способа зависит от наличия в тексте шаблона строки "<xsl:stylesheet": если строка есть, то используется XSLT-шаблонизатор, иначе EJS-шаблонизатор

Каждый шаблон можно предварительно проверить с помощью кнопки "Испытать" в разделе "Шаблоны сообщений".

Там же можно ознакомиться с содержимым сгенерированного XML-документа.

EJS

Для применения данной технологии используется платформа node.js. Для формирования HTML-сообщения XML-документ преобразуется в json формат, например, документ

<doc>
 <hostname>example.com</hostname>
 <user>
   <realname>Иван Иванов</realname>
   <email>ivan@example.com</email>
 </user>
 <item>
   <id>1</id>
   <name>shared hosting #1</name>
 </item>
 <item>
   <id>2</id>
   <name>shared hosting #2</name>
 </item>
</doc>

будет преобразован в json в следующем виде:

{
  'hostname': 'example.com',
  'user': {
    'realname': 'Иван Иванов',
    'email': 'ivan@example.com'
  },
  'item': [
    {
      'id': 1,
      'name': 'shared hosting #1'
    },
    {
      'id': 2,
      'name': 'shared hosting #2'
    }
  ]
}

Затем запускается скрипт node /usr/local/mgr5/etc/scripts/template_ejs.js -t /путь/до/файла/шаблона, на вход этому скрипту передается json-документ, на выход он выдает содержимое HTML-письма.

Например, шаблон открытия виртуального хостинга может выглядеть следующим образом:

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style type="text/css">
      b { color: #333; }
      .sP {font-family:Arial,Helvetica,sans-serif; font-size:12px;}
      .sA {color:blue;}
      .sH2 {font-family:Arial,Helvetica,sans-serif; font-size:13px; font-weight:bold;}
      .sP {font-family:Arial,Helvetica,sans-serif; font-size:12px;}
      .sLI {font-family:Arial,Helvetica,sans-serif; font-size:12px;}
      .sUL {margin-top: 0px; padding-left: 30px;}
      #subject {
        font-family:Arial,Helvetica,sans-serif; font-size:15px; margin-top:6px; margin-left:10px; margin-right:10px; margin-bottom:5px;
      }
      #content {margin: 8px 9px;}
    </style>
  </head>
  <body bgcolor="#ffffff">
    <div>
    <table width="90%" align="center" cellpadding="0" cellspacing="0" border="0">
    <!-- Subject -->
    <tr><td bgcolor="#e5e5e5">
    <div id="subject"><b>Активация Виртуального Хостинга</b></div>
    </td></tr>
    <!-- Text -->
    <tr><td>
      <div id="content">
        <p class="sP">Здравствуйте, <%= user.realname %>!</p>
        <p class="sP">Настоящим письмом уведомляем, что на ваше имя был зарегистрирован Виртуальный Хостинг.
        Предлагаем распечатать данное сообщение для удобства использования в дальнейшем.</p>
        <h2 class="sH2">Информация о Хостинге</h2>
        <ul class="sUL">
            <li class="sLI"><b>Тарифный план: </b
            > <%= pricelist.name_ru && pricelist.name_ru !=  ? pricelist.name_ru : pricelist.name  %></li>
            <li class="sLI"><b>Дата открытия: </b> <%= item.opendate %></li>
            <li class="sLI"><b>Доменное имя: </b> <%= item.domain %></li>
            <li class="sLI"><b>IP-адрес сервера: </b> <%= item.ip %></li>
        </ul>
        <p class="sP"><br/>Желаем успехов!<br/>Команда "<%= project.name >"</p>
      </div>
    </td></tr>
    </table>
    </div>
  </body>
</html>

XSLT

XSLT - язык для преобразования XML документов. Используется реализация из библиотеки libxml.

Например, шаблон открытия виртуального хостинга может выглядеть следующим образом:

 <?xml version='1.0' encoding='UTF-8'?>
 <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:mgr="http://ispsystem.com/xslplugin">
 <xsl:output method='xml' indent='yes' encoding='UTF-8' omit-xml-declaration='yes'/>
 <xsl:variable name="subject">Активация Виртуального Хостинга</xsl:variable>
 <xsl:variable name="content">
     <p class="sP">Здравствуйте, <xsl:value-of select='/doc/user/realname'/>!</p>
     <p class="sP">Настоящим письмом уведомляем, что на ваше имя был зарегистрирован Виртуальный Хостинг. 
     Предлагаем распечатать данное сообщение для удобства использования в дальнейшем.</p>
     <h2 class="sH2">Информация о Хостинге</h2>
     <ul class="sUL">
         <li class="sLI"><b>Тарифный план: </b> 
         <xsl:choose><xsl:when test="/doc/pricelist/name_ru !=''"><xsl:value-of select="/doc/pricelist/name_ru"/></xsl:when>
         <xsl:otherwise><xsl:value-of select="/doc/pricelist/name"/></xsl:otherwise></xsl:choose></li>
         <li class="sLI"><b>Дата открытия: </b> <xsl:value-of select='/doc/item/opendate'/></li>
         <li class="sLI"><b>Доменное имя: </b> <xsl:value-of select='/doc/item/domain'/></li>
         <li class="sLI"><b>IP-адрес сервера: </b> <xsl:value-of select='/doc/item/ip'/></li>
     </ul>
     <p class="sP"><br/>Желаем успехов!<br/>Команда "<xsl:value-of select="/doc/project/name"/>"</p>
 </xsl:variable>
 <xsl:template match='/doc'>
 <html>
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     <style type="text/css">
       b { color: #333; }
       .sP {font-family:Arial,Helvetica,sans-serif; font-size:12px;}
       .sA {color:blue;}
       .sH2 {font-family:Arial,Helvetica,sans-serif; font-size:13px; font-weight:bold;}
       .sP {font-family:Arial,Helvetica,sans-serif; font-size:12px;}
       .sLI {font-family:Arial,Helvetica,sans-serif; font-size:12px;}
       .sUL {margin-top: 0px; padding-left: 30px;}
       #subject {
         font-family:Arial,Helvetica,sans-serif; font-size:15px; margin-top:6px; margin-left:10px; margin-right:10px; margin-bottom:5px;
       }
       #content {margin: 8px 9px;}
     </style>
   </head>
   <body bgcolor="#ffffff">
     <div>
     <table width="90%" align="center" cellpadding="0" cellspacing="0" border="0">
     <!-- Subject -->
     <tr><td bgcolor="#e5e5e5">
     <div id="subject"><b><xsl:value-of select='$subject'/></b></div>
     </td></tr>
     <!-- Text -->
     <tr><td>
       <div id="content">
         <xsl:copy-of select="$content"/>
       </div>
     </td></tr>
     </table>
     </div>
   </body>
 </html>
 </xsl:template>
 </xsl:stylesheet>