[英]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.vm
和body.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.