2008-10-17 4 views
7

포함 된 (구문 분석 된) 머리글, 본문 및 바닥 글 템플릿이있는 표준 템플릿이 있다고 가정 해보십시오.속도 #parse하지만 변수에 할당

본문 템플릿에서 $ subject와 같은 변수가 정의되어 있으며이 템플릿 템플릿을 헤더 템플릿에도 표시하려고합니다.

HTML :: Mason (perl 기반)과 같은 다른 템플릿 언어에서는 body 템플릿을 먼저 $ subject 변수를 선택하지만 출력을 임시로 변수에 저장하여 최종 출력이 올바른 결과를 얻을 수 있습니다 순서 (머리글, 본문, 바닥 글)이

설정과 같이 보일 것이다 속도에서

($ 바디 = # 구문 분석 ("body.vm을"))

구문 분석 ("header.vm")

$ {body}

구문 분석 ("footer.vm")

그러나이 방법을 수행하는 데 어떤 생각이 들지 않습니까?

답변

3

VelocityTools의 일부입니다.

이 당신이 당신의 응용 프로그램에 대한 레이아웃을 정의 할 수 있습니다 -의는 application.vm을 호출하자 -하는 당신은 머리글, 바닥 글 등으로 분석하고 선언 할 수 있습니다 본체 내용이 screen_content 선언, 예를 사용하여 배치되는 경우 :

#set($subject = "My Subject") 
<div id="content"> 
</div> 

더 드 :

<html> 
    <head> 
    <title>$subject</title> 
    </head> 
    <body> 
    #parse("header.vm") 
    $screen_content 
    #parse("footer.vm") 
    </body> 
</html> 

VelocityLayoutServlet은 당신의 몸 템플릿에 $subject 변수를 설정할 수 있습니다 렌더링, 예를 들면 전에 (따라서, 변수 등) 템플릿을 evalulate합니다 꼬리 정보는 in the Velocity documentation입니다.

0

올바르게 이해하면 header.vmbody.vm 템플릿에 보간 된 Velocity 변수 $subject이 필요합니다. 현재 변수는 body.vm 템플릿에 정의되어 있으므로 이전 템플릿 header.vm에서 템플릿 변수를 참조 할 수 없습니다.

$ subject의 정의를 globals.vm라고하는 자체 템플릿 스 니펫으로 추상화 한 다음 최상위 템플릿에 포함시키지 않는 이유는 무엇입니까? 따라서 당신은 다음과 같이 나타낼 수 있습니다.

#parse("globals.vm") 
#parse("header.vm") 
#parse("body.vm") 
#parse("footer.vm") 
9

위의 두 가지 해결책 중 하나가 효과가 있습니다. VelocityLayoutServlet 솔루션에는 Velocity Tools라는 추가 패키지가 필요합니다 (Velocity에서도 제공). 나는이 접근법 (그리고 변종)에 부분적으로 자신을 적용한다.

세 번째 방법은 따옴표 안에 또한 #prase 넣어하는 것입니다하십시오 #set가 내

set ($body="#parse('body.vm')") 

은 큰 따옴표로 아무것도 평가된다. 작은 따옴표 내의 문자열은 문자 그대로 전달됩니다.

관련 문제