Velocity模板包含主模板

3

我正在使用Velocity模板,其中我需要有多个页面遵循相同的模板样式,例如“about_me”,“contact_us”和“home”,所有这些页面都将具有相同的标题、左侧菜单,唯一不同的是内容。 例如,它们的HTML代码完全相同,除了在< div id="page-content" >中的一个。

<html>
  <head>
    .. some common css and js 
  </head>

   <body>
    <div id="main-content">
     <div id="header"> 
       Main Menu Bar on top 
     </div>
     <div id="left-menu"> 
       Menus on the left
     </div>
     <div id="page-content"> 
       I could be contact us, or home or about us.
     </div>
    </div>
   </body>
</html>

我已经采用的一种方法是,为头部和侧边菜单使用单独的 .vm 文件,在 aboutus.vm、contactus.vm 和 home.vm 上导入它们,但这样会有很多重复代码。有没有一种方式将所有内容定义为模板,并仅在我的 .vm 文件中定义“page-content”?

1个回答

3
您可以在页面中间解析velocity文件,并将模板名称定义为变量。这样,您就可以针对每个不同的页面-content.vm文件指向不同的$contentTemplate。
下面的例子中,$contentTemplate 可以是以下任何一个:
- home/page-content.vm - about/page-content.vm - contact/page-content.vm
请参见下面的示例。
<html>
  <head>
    .. some common css and js 
  </head>

   <body>
    <div id="main-content">
     <div id="header"> 
       Main Menu Bar on top 
     </div>
     <div id="left-menu"> 
       Menus on the left
     </div>
     <div id="page-content"> 
       #parse($contentTemplate)
     </div>
    </div>
   </body>
</html>

谢谢Ed,这样我只需要一个页面,比如我把它命名为“main.html”,然后我需要从控制器中传递“contentTemplate”吗?所有使用此模板的控制器将使用相同的视图文件吗? - bond
没错,你可能更喜欢将类似于“home”或“about”的内容传递到速度上下文中,而不是实际的文件名,然后从该值计算文件名,但这取决于你。 - Edd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接