2012-02-08 27 views
9

Tôi đang cố gắng trừu tượng một kịch bản phổ biến trong đánh dấu được tạo ra nơi tôi cần một vài thẻ để "bọc" một nội dung tùy ý. Vì vậy, thay vì viết nàyBạn có thể xác định macro vận tốc để "bọc" nội dung khác không?

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

tôi sẽ có thể viết một cái gì đó "giống như"

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

đâu rõ ràng là tôi không biết những gì # ???? sẽ là.

Theo như tôi biết không thể thực hiện điều này với macro, thiếu định nghĩa macro cho phần đầu của khối và macro cho phần cuối của khối.

#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 

Bất kỳ cách nào tốt hơn để thực hiện việc này?

Trả lời

10

Sử dụng #@ vĩ mô cú pháp gọi, cùng với các biến $!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 

ám như:

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

(Các ## trong cơ thể vĩ mô loại bỏ dấu khoảng trắng, ví HTML nó có thể không quan trọng.)

+0

Điều gì xảy ra nếu nội dung là HTML? Vì nó là, nó sẽ thoát khỏi nó. – tokland

Các vấn đề liên quan