2012-07-04 45 views
2

如何創建全局可用的函數?如何在全球範圍內創建Freemarker功能?

眼下,如下的應用程序的結構:

  • 每個種要求,如(例如一本書,作者或出版商不同的模板),一個顯着的模板:
  • 這些模板的每個房間都設有從宏觀常見元素page.ftl,如:
[#ftl] 
[#macro decorate] 
<html> 
    <head> 
    <!-- some stuff here --> 
    </head> 
    <body> 
    <header><!-- more stuff here --></header> 
    <div id="main-content">[#nested /]</div> 
    <footer><!-- more stuff here --></footer> 
    </body> 
</html> 
[/#macro] 

所以,book.ftl看起來如此mething像:

[#ftl] 
[#include page.ftl p] 
[@p.decorate] 
<h1>Book: The Bible</h1> 
<dl> 
    <dt>Author:</dt> 
    <dd>God</dd> 
</dl> 

[#-- HERE'S THE IMPORTANT BIT --] 
[@myFunctionHere('The Bible') /] 

[#-- I ALSO NEED TO BE ABLE TO CALL myFunction IN INCLUDED PAGES TOO --] 
[#import "_partial.ftl" /] 

[/@p.decorate] 

我想創建一個將被定義處處包含一次和可用的全局函數(在book.ftl等人,再加上它恰好導入/任何模板包括)。

我該如何解決這個問題,最好是沒有自己的命名空間?

回答

5

只是爲了確保清楚:#include -d模板與包含模板共享名稱空間,所以如果您需要,可以使用#import#import的觀點正是模板不共享名稱空間。如果你想要這些單獨的名稱空間,但你想要共享一些宏/函數,那麼這些模板仍然可以相互對應#import

如果你真的想一些功能/宏成爲全球性的,你已經定義,那麼在他們之後,你可以將它們複製到像這樣的全局命名空間:

[#macro myMacro] 
    ... 
[/#macro] 
[#global myMacro = myMacro] 

在這之後,你可以發出[@myMacro /]無處不在。

+0

哦,很酷,沒有意識到函數和宏是可以像那樣使用的對象。 – BenLanc