2012-04-01 3 views
0

나는 grails 응용 프로그램 내에서 매우 간단한 CMS 기능을 구축하려고합니다. 기본적으로 내가 여기에서 노력하고있는 것은 문자열에 gsp가 있고이 문자열에서 gsp를 작성하려고합니다.grails 응용 프로그램 내의 CMS

작동하지만 결과 페이지의 기본 레이아웃이 장식되어 있지 않습니다. 또한 다른 시도에서 make 메소드에 전달 된 모델이 무시된다는 사실을 발견했습니다.

저는 grails 2.0.1을 사용하고 있습니다.

감사는 본질적으로 문자열을 렌더링 호출하고 있기 때문에 작동하지 않습니다

class HomeController { 

    def groovyPagesTemplateEngine 

    def cms() { 
     def page = """<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
<meta name="layout" content="main"/> 
<title>CMS page using your application's main layout</title> 
</head> 
<body> 
CMS page using your application's "main" layout. 
</body> 
</html>""" 

     StringWriter sw = new StringWriter() 
     PrintWriter pw = new PrintWriter(sw) 

     groovyPagesTemplateEngine.createTemplate(page, "somepage.gsp").make([nome: "ciao"]).writeTo(pw) 
     render sw 
    } 
+0

정말이 기능을 사용 하시겠습니까? Weceem을 보았습니까? http://www.weceem.org/ Grails와 정말 잘 통합되어 있습니다 ... –

+0

맞습니다. 나는 그것을 밖으로 검사했다 그러나 나가 여기에서 달성하고 싶었던 것은이 실험을 작동하는 얻고 있었다. 그 사이에 내가 지금까지 많이 들었던 것에 따라 weceem를 시험해 볼 것이다 – Luca

답변

1

.

sitemesh 필터가 호출되면 레이아웃이 적용됩니다. 이 작업을 수행하려면 문자열에 적용되는 sitemesh 데코레이터를 얻어야합니다.

즉,

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
<meta name="layout" content="${layout}"/> 
${head} 
</head> 
<body> 
${body} 
</body> 
</html> 

Mytemplate.gsp

다음은 호출 할 수

우리는 유사한 기능을 구축했다

, 우리가했던 모든 관련 페이지 조각을 보낼 수 있었다 :

render(template: 'MyTemplate', model:[ layout: 'layout', head: '...', body: '...' ]) 

이것은 당신이하려고하는 것과 같은 효과가 있지만 sitemesh (잠재적으로 올바르게 통합 된 플러그인).

+0

나는 당신의 주안점을 얻는다. 그러나 예제에서 템플릿은 파일 시스템에 있기 때문에 render를 호출 할 수 있습니다. 렌더링 (및 sitemesh 필터 참으로) 템플릿 (예 : 데이터베이스에서 오는) 안에 템플릿을 데코 레이팅하는 방법이 있습니까? – Luca

+0

더 명확히하기 위해 : 나는 데이터베이스에 gsp를 저장하고 레이아웃 꾸미기로 렌더링하려고합니다. 지금까지는 이것이 더 이상 가능하지 않은 것 같습니다 ... – Luca

+0

아마도 가능합니다. applyLayout 태그 (http://grails.org/doc/1.1/ref/Tags/applyLayout.html#)의 코드를 살펴보면 데코레이터에 대한 추가 호출이 있음을 알 수 있습니다. 그러나 데코레이터 체인이 gsp에 설정되어 있지 않습니다. 렌더링을 인터셉터 나 필터를 통해 필터 체인 아래로 이동하거나 sitemesh 필터의 기능을 복제해야 할 수도 있습니다. 내 솔루션은이 간단한 해결 방법을 제공합니다. –

관련 문제