你能定义一个速度宏来“包装”其他内容吗?

时间:2012-02-08 13:55:14

标签: html velocity

我正在尝试在生成的标记中抽象一个常见的场景,我需要一些标记来“包装”任意内容。所以不要写这个

<div class="container">
   <p class="someClass">Some header</p>
   <div id="foo">
     <!-- The real content that changes -->
   </div>
</div>

我可以写一些“喜欢”

#????
 <!-- The real content that changes
#end
显然,我不知道#????将会。

据我所知,不可能用宏来做这个,不能为块的开始定义一个宏,也不能为块的结尾定义一个宏。

#macro(startContained)
<div class="container">
   <p class="someClass">Some header</p>
   <div id="foo">
#end

#macro(endContained)
   </div>
</div>
#end

#startContained
<!-- The real content -->
#endContained

有更好的方法吗?

1 个答案:

答案 0 :(得分:12)

使用#@宏调用语法以及$!bodyContent变量:

#macro(wrapper)
  <div class="container">
    <p class="someClass">Some header</p>
    <div id="foo">
      $!bodyContent##
    </div>
  </div>
#end

#@wrapper()
  The real content that changes.
#end

#@wrapper()
  Other different content.
#end

呈现为:

<div class="container">
  <p class="someClass">Some header</p>
  <div id="foo">
    The real content that changes.
  </div>
</div>

<div class="container">
  <p class="someClass">Some header</p>
  <div id="foo">
    Other different content.
  </div>
</div>

(宏体中的##删除尾随空格;对于HTML,它可能无关紧要。)