10

含まれている (解析された) ヘッダー、本文、フッター テンプレートを含む標準テンプレートがあるとします。

body テンプレートでは $subject のような変数が定義されており、ヘッダー テンプレートにも表示する必要があります。

HTML::Mason (perl ベース) などの他のテンプレート言語では、最初に body テンプレートを評価して $subject 変数を取得しますが、その出力を変数に一時的に保存して、最終的な出力が正しい順序 (ヘッダー、本文、フッター)

速度では、次のようになります

set ($body=#parse("body.vm"))

parse("header.vm")

${ボディ}

parse("フッター.vm")

しかし、これはうまくいかないようです。これを行う方法について何か考えはありますか?

4

3 に答える 3

10

上記の2つのソリューションのいずれかが機能します。VelocityLayoutServletソリューションには、Velocity Toolsと呼ばれる追加のパッケージ(これもVelocityからのもの)が必要です。私はこのアプローチ(およびバリアント)に部分的です。

3番目の方法は、単に#parseを引用符で囲むことです。

set ($body="#parse('body.vm')")

#set内では、二重引用符で囲まれたものはすべて評価されます。一重引用符で囲まれた文字列は、文字通り渡されます。

于 2008-10-31T02:47:25.040 に答える
3

これは、 VelocityToolsの一部であるVelocityLayoutServletを使用して実行できます。

これにより、アプリケーションのレイアウトを定義できます-それを呼び出しましょう-ヘッダー、フッターなどで解析し、宣言application.vmを使用して本体コンテンツが配置される場所を宣言できます。screen_content

<html>
  <head>
    <title>$subject</title>
  </head>
  <body>
  #parse("header.vm") 
  $screen_content
  #parse("footer.vm") 
  </body>
</html>

VelocityLayoutServletは、レンダリングの前にテンプレート (および変数) を評価します。これにより$subject、ボディ テンプレートに変数を設定できます。たとえば、次のようになります。

#set($subject = "My Subject")
<div id="content">
</div>

詳細については、Velocity のドキュメントを参照してください。

于 2008-10-28T13:20:00.927 に答える
0

私があなたを正しく理解していれば、とテンプレート$subjectに補間された名前の Velocity 変数が必要です。現在、変数はテンプレートで定義されているため、以前のテンプレートでは参照できません。header.vmbody.vmbody.vmheader.vm

$subject の定義を独自のテンプレート スニペット ( globals.vmsay と呼ばれる) に抽象化し、それを最上位のテンプレートに含めてみませんか。したがって、次のようになります。

#parse("globals.vm")
#parse("header.vm")
#parse("body.vm")
#parse("footer.vm")
于 2008-10-30T05:31:31.247 に答える