Importando 2 ou mais macros como um único namespace // Freemarker

Ao trabalhar com macros no freemarker, você pode achar que precisa usar macros diferentes com o mesmo nome. Em outros casos, pode ser necessário estender um conjunto de macros com outro.

Importando em vez de incluir

Imagine que você tenha um conjunto de macros salvas em um arquivo chamado macrosAcontendo macros a, be c(desculpe por ser tão pouco criativo;]). Você pode importá-lo:

<#import "path/to/macros/macrosA" as macros>

As macros serão carregadas macrospara que você possa usar aquelas como

<@macros.a />
<@macros.b />

<@macros.c />

É assim que você faz o namespace. Se você tiver uma macro chamada ‘a’ em outro arquivo chamado, macrosBentão você pode carregar esse arquivo com um nome diferente e você poderá usar ambas as macros no mesmo modelo.

<#import "path/to/macros/macrosA" as macrosA >
<#import "path/to/macros/macrosB" as macrosB >


<@macrosA.a />

<@macrosB.a />

Extensão de uma macro com outra

Agora imagine que você tem um conjunto de macros em um arquivo chamado macrosAe deseja estender esse conjunto com macros de macrosB.

Quando você faz

<#import "path/to/macros/macrosA" as smth>

em seguida, smthtorna se um hash contendo todas as macros de dentro macrosA. Isso significa que você pode operar nele da mesma forma que faria em hashes no freemarker (exatamente da mesma forma como faria com JSON no freemarker).

Você pode adicionar facilmente um hash a outro:

<#import "path/to/macros/macrosA" as macrosA >
<#import "path/to/macros/macrosB" as macrosB >


<#assign allmacros = macrosA + macrosB>

Agora allmacrosconterá todas as macros definidas em ambos os arquivos. Se houver uma macro com o mesmo nome em macrosAe a macrosBmacro de macrosBsubstituirá a macro de macrosA.

É isso aí

Simples e útil – não é?
Os créditos vão para @mateuszgachowski por me ensinar isso. Valeu cara ;]