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 macrosA
contendo macros a
, b
e c
(desculpe por ser tão pouco criativo;]). Você pode importá-lo:
<#import "path/to/macros/macrosA" as macros>
As macros serão carregadas macros
para 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, macrosB
entã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 macrosA
e deseja estender esse conjunto com macros de macrosB
.
Quando você faz
<#import "path/to/macros/macrosA" as smth>
em seguida, smth
torna – 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 allmacros
conterá todas as macros definidas em ambos os arquivos. Se houver uma macro com o mesmo nome em macrosA
e a macrosB
macro de macrosB
substituirá a macro de macrosA
.
É isso aí
Simples e útil – não é?
Os créditos vão para @mateuszgachowski por me ensinar isso. Valeu cara ;]