Ir para o conteúdo

Personalização de mensagens

O FreeMarker pode ser usado no assunto e no corpo de campanhas de e-mail. FreeMarker é um mecanismo de modelagem, uma biblioteca Java para geração de saída textual. Com o FreeMarker, você pode gerenciar o conteúdo dos e-mails.

Link para a documentação completa do FreeMarker - https://freemarker.apache.org/docs

Definindo e Configurando Variáveis

Criar uma variável e atribuir um valor a ela:

  • <#assign positionSum = 4200000> - cria uma variável numérica
  • <#assign subscriberTitle = "Attention"> - cria uma variável de string
  • ${positionSum} ou ${subscriberTitle} - produz a variável criada

Se for necessário exibir os dados do assinante armazenados na agenda, o nome da variável é formado como a palavra reservada "contato." mais o nome do campo (fields.name) da listas de contactos.

  • ${contact.name} - exibe os detalhes do contato, neste caso a coluna "Nome"
  • ${contact.birthdate} - exibe detalhes de contato, neste caso a coluna "Data de nascimento"

Operações matemáticas

Pode ser usado para:

  • calcular o tamanho do desconto em rublos,
  • calcule o valor do desconto como uma porcentagem,
  • calcular quantos pontos um assinante precisa acumular para passar para a próxima etapa do programa de fidelidade,
  • recalcular os preços levando em consideração os descontos pessoais.

Exemplos:

  • ${positionSum * 0.50}
  • ${positionSum * 0.25 / 100}%
  • <p class="sale">${(product.oldPrice-product.price)/product.oldPrice*100}%</p>

Arredondamento

Informação

Os métodos descritos abaixo são arredondados apenas para número inteiro. Se você precisar exibir um número, deixando alguns dígitos após a vírgula, consulte o parágrafo "Formatos de saída"

Métodos de arredondamento:

  • round: arredondar para o mais próximo número inteiro (se houver 5 ou mais após a vírgula decimal, o número é arredondado para cima, caso contrário - para baixo)
  • floor: arredonda o número sempre para baixo
  • ceiling: arredonda o número sempre para cima

Exemplos:

  • Por exemplo, vamos pegar price = 12.534721
    • ${price?round} - mostrará 13
    • ${price?floor} - mostrará 12
    • ${price?ceiling} - mostrará 13
  • Por exemplo, vamos pegar price = 48.2521
    • ${price?round} - mostrará 48
    • ${price?floor} - mostrará 48
    • ${price?ceiling} - mostrará 49

Formatos de saída

Esta é a conversão de saída e arredondamento.

Por exemplo, se você deseja exibir o valor do desconto com uma casa decimal para não obter o valor 12.23472100012%.

  • Por exemplo, vamos pegar price = 12.234721
    • ${price?string["0"]} - mostrará 12
    • ${price?string["0.#"]} - mostrará 12.2
    • ${price?string["0.##"]} - mostrará 12.23
    • ${price?string["0.###"]} - mostrará 12.235
    • ${price?string["0.####"]} - mostrará 12.2347

Trabalhe com texto

Se os nomes dos produtos são gerados de maneiras diferentes, o método de alterar a capitalização das strings - capitalize - é adequado para trazer todos os nomes para um único estilo.

Para não quebrar o layout do cartão do produto, você pode usar:

  • usando o método length para determinar o comprimento da string
  • usando o método truncate para truncar uma linha e/ou adicionar reticências no final.

Você pode aplicar vários métodos em uma linha às variáveis

Por exemplo, vamos pegar product.name = "Women shoes".

  • Alterar maiúsculas e minúsculas de strings
    • ${product.name?capitalize} - uma string em que todas as palavras começam com uma letra maiúscula
      • ${" women shoes"?capitalize} - mostrará " Women Shoes"
      • ${"WoMen Shoes"?capitalize} - mostrará "Women Shoes"
    • ${product.name?lower_case} - a string inteira está em minúsculas
      • ${"WoMen Shoes"?lower_case} - mostrará "women shoes"
    • ${product.name?upper_case} - toda a string é maiúscula
      • ${"WoMen Shoes"?upper_case} - mostrará "WOMEN SHOES"
  • Calcule o comprimento da string
    • ${product.name?length} - 11
  • Cadeia de caracteres truncada
    • nos colchetes do método truncate, você precisa especificar o comprimento, levando em consideração todos os caracteres adicionais
    • ${product.name?truncate(10)} - mostrará "Women[...]", porque esta função após o corte da string adiciona [...]
    • ${product.name?truncate(5, '---')} - mostrará "Wo---", porque esta função permite que você defina os caracteres que serão adicionados no final da linha
  • Aplicar vários métodos
    • ${product.name?capitalize?truncate(13)} - mostrará "Women Sh[...]"

Condições lógicas

As seguintes construções lógicas são permitidas:

<#if condition>
  ...
<#elseif condition2>
  ...
<#elseif condition3>
  ...
...
<#else>
  ...
</#if>

Exemplo com um nome de assinante em branco

Por exemplo, se você precisar exibir o nome de um assinante, poderá exibi-lo assim: "Olá, ${contact.name}!"

Se o assinante não tiver um nome, ele verá o texto com vírgulas e espaços extras "Olá, !"

Opções adequadas:

  • "Olá<#if (contact.name?length>1)>, ${contact.name?capitalize}<!--#if-->!"
  • "Olá<#if contact.name??>, ${contact.name?capitalize}<!--#if-->!"
  • "Olá<#if contact.name?has_content>, ${contact.name?capitalize}<!--#if-->!"

Exemplo com exibição/ocultação de um bloco para assinantes por condição

A carta da loja de suprimentos para animais de estimação deve conter 3 banners. O dono do cachorro não precisa mostrar um banner que seja adequado ao dono do gato ou do papagaio.

Se você não especificar as condições:

<a href=”#”><img src=”/banner-dog.png” /></a><br />
<a href=”#”><img src=”/banner-cat.png” /></a><br />
<a href=”#”><img src=”/banner-bird.png” /></a>

Com a condição:

<#if ${contact.pet}="собака">
    <a href=”#”><img src=”/banner-dog.png” /></a>
<#else>
    <a href=”#”><img src=”/banner-cat.png” /></a>
    <a href=”#”><img src=”/banner-bird.png” /></a>
</#if>

Сiclos

Exemplo de exibição de uma série de produtos para acionadores

O designer de layout elabora o código de um cartão de produto, que pode ser multiplicado por meio de um ciclo pelo número de produtos selecionados para exibição na carta.

<#list eventInfos as event>
    <div class=”product”>
        <a href=”${event.productURL}”><img src="${event.productImg}" /></a>
        <p class=”product-title”><a href=”${event.productURL}”>${event.productName}</a></p>
        <p class=”product-price”><a href=”${event.productURL}”>Preço ${event.productPrice} euros</a></p>
    </div>
</#list>

Exemplo de um filtro em um loop

O cliente opta por não apresentar aos assinantes produtos com preços inferiores a 20 euros.

<#list eventInfos as event>
    <#if ${event.productPrice}<20 ><#continue></#if>
    <div class=”product”><a href=”${event.productURL}”><img src="${event.productImg}" /></a>
    <p class=”product-title”><a href=”${event.productURL}”>${event.productName}</a></p>
    <p class=”product-price”><a href=”${event.productURL}”>Preço ${event.productPrice}} euros</a></p>
</#list>

Um exemplo de verificação da presença de valores em um loop

Se o loop estiver vazio, exibe uma mensagem informando que não há produtos.

<#list eventInfos as event>
    <div class=”product”><a href=”${event.productURL}”><img src="${event.productImg}" /></a>
    <p class=”product-title”><a href=”${event.productURL}”>${event.productName}</a></p>
    <p class=”product-price”><a href=”${event.productURL}”>Preço ${event.productPrice}} euros</a></p>
    <#else>
    No products
</#list>

Um exemplo de adição de um separador entre os elementos do loop

Para adicionar um separador entre os elementos do loop, você pode usar a diretiva <#sep>, que adicionará código após cada elemento do loop, exceto o último.

<#list eventInfos as event>
    <p class=”categoryTitle”><a href=”${event.categoryUrl}”>${event.categoryTitle}</a></p>
    <#sep>, </#sep>
</#list>