2012-02-08 4 views
9

Estoy tratando de abstraer un escenario común en el marcado generado donde necesito un par de etiquetas para "envolver" un contenido arbitrario. Así que en lugar de escribir este¿Se puede definir una macro de velocidad para "envolver" otro contenido?

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

yo sería capaz de escribir algo "como"

#???? 
<!-- The real content that changes 
#end 

Donde obviamente, no sé lo que el # ???? sería.

Hasta donde yo sé, no es posible hacer esto con macros, salvo definir una macro para el inicio del bloque y una macro para el final del bloque.

#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 

¿Alguna mejor manera de hacerlo?

Respuesta

10

Utilice la sintaxis #@ macro llamada, junto con la variable $!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 

Renders como:

<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> 

(El ## en el cuerpo macro elimina espacios en blanco; para HTML fuere no importa.)

+0

¿Qué sucede si el contenido es HTML? Como es, lo escapará. – tokland

Cuestiones relacionadas