2

グローバルに使用できる関数を作成するにはどうすればよいですか?

現在、アプリケーションは次のように構成されています。

  • リクエストの種類ごとに個別のテンプレート (例: 書籍、著者、または出版社の個別のテンプレート)。
  • これらの各テンプレートは、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 は次のようになります。

[#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 など、およびインポート/インクルードするテンプレート)。

できれば独自の名前空間なしで、どうすればよいでしょうか?

4

1 に答える 1

5

明確にするために: #include-d テンプレートは、含まれるテンプレートと名前空間を共有するため、必要な場合は使用しないでください#import。要点は#import、テンプレートが名前空間を共有しないということです。これらの個別の名前空間が必要であるが、いくつかのマクロ/関数を共有したい場合は、テンプレートを#import相互に使用できます。

一部の関数/マクロをグローバルにしたい場合は、それらを定義した後、次のようにグローバル名前空間にコピーできます。

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

[@myMacro /]この後、どこでも発行できます。

于 2012-07-04T15:23:55.877 に答える