2012-02-08 6 views
9

Sto cercando di astrarre uno scenario comune nel markup generato in cui ho bisogno di un paio di tag per "avvolgere" un contenuto arbitrario. Così, invece di scrivere questoÈ possibile definire una macro di velocità per "avvolgere" altri contenuti?

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

sarei stato in grado di scrivere qualcosa di "simile"

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

Dove, ovviamente, non so che cosa il # ???? sarebbe.

Per quanto ne so non è possibile farlo con le macro, brevi di definire una macro per l'inizio del blocco e una macro per la fine del blocco.

#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 

Qual è il modo migliore per farlo?

risposta

10

Utilizzare la sintassi #@ macro chiamata, insieme con la variabile $!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 

rende come:

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

(Il ## nel corpo macro rimuove gli spazi finali, per HTML essa può non importa.)

+0

Che cosa succede se il contenuto è l'HTML? Così com'è, lo sfuggirà. – tokland

Problemi correlati