簡體   English   中英

速度#parse但將其分配給變量

[英]Velocity #parse but assign it to a variable

假設您有一個包含(已解析)標題,正文,頁腳模板的標准模板。

在body模板中定義了一個像$ subject這樣的變量,你希望它也顯示在頭模板中。

在其他一些模板語言中,例如HTML :: Mason(基於perl),你首先要評估主體模板以獲取$ subject變量,但是將它的輸出臨時存儲在一個變量中,這樣你的最終輸出就會以正確的順序結束(標題,身體,頁腳)

在速度上它看起來像

set($ body = #parse(“body.vm”))

解析( “header.vm”)

$ {機構}

解析( “footer.vm”)

然而,這似乎不起作用,任何關於如何做到這一點的想法?

上述兩種解決方案中的任何一種都可行。 VelocityLayoutServlet解決方案需要一個名為Velocity Tools的額外軟件包(也來自Velocity)。 我自己偏愛這種方法(和變體)。

第三種方法只是將#parse放在引號內:

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

在#set中,評估雙引號中的任何內容。 單引號內的字符串按字面順序傳遞。

您可以使用VelocityLayoutServlet執行此操作,它是VelocityTools的一部分。

這允許您為應用程序定義布局 - 讓我們稱之為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文檔中找到。

如果我理解正確,你想在header.vmbody.vm模板中插入一個名為$subject的Velocity變量。 現在,變量在body.vm模板中定義,因此您無法在早期模板header.vm引用它。

為什么不將$ subject的定義抽象為自己的模板片段,名為globals.vm ,然后將其包含在頂級模板中。 所以你有:

#parse("globals.vm")
#parse("header.vm")
#parse("body.vm")
#parse("footer.vm")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM