CMS внутри приложения Grails - PullRequest
       13

CMS внутри приложения Grails

0 голосов
/ 01 апреля 2012

Я пытаюсь создать очень простую функциональность CMS в приложении Grails. В основном я пытаюсь использовать gsp в строке, и я хотел бы построить gsp из этой строки.

Работает, но получившаяся страница не украшена основным макетом. Кроме того, в некоторых других попытках я заметил, что модель, переданная методу 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
    }

1 Ответ

1 голос
/ 02 апреля 2012

Это не работает, потому что вы просто вызываете рендер со строкой.

Макет применяется, когда вызывается фильтр sitemesh.Чтобы это работало, вам нужно применить декораторы sitemesh к вашей строке.

Когда мы создавали подобную функцию, все, что мы делали, это отправляли соответствующие фрагменты страницы:

, т.е.

Mytemplate.gsp

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

и тогда вы можете просто позвонить:

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

Это имеет тот же эффект, что вы пытаетесь сделать, но с добавлением sitemesh (и, возможно, плагинов, интегрирующихся правильно).

...