如何创建全局可用的功能?
目前,该应用程序的结构如下:
[#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看起来像是:
[#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和其他函数中,以及它导入/包含的任何模板)。
我怎么会这样做,最好没有它自己的命名空间?
答案 0 :(得分:5)
只是为了确保清楚:#include
- d模板与包含模板共享名称空间,因此如果您需要,请不要使用#import
。 #import
的要点恰好是模板不共享名称空间。如果你想要那些单独的名称空间,但是你想要共享一些宏/函数,那么模板仍然可以#import
彼此。
如果您真的希望某些函数/宏变为全局,那么在定义它们之后,您可以将它们复制到全局名称空间中,如下所示:
[#macro myMacro]
...
[/#macro]
[#global myMacro = myMacro]
在此之后,您可以在任何地方发布[@myMacro /]
。