【问题标题】:CMS inside a grails appGrails 应用程序中的 CMS
【发布时间】:2012-04-02 06:20:25
【问题描述】:

我正在尝试在 grails 应用程序中构建一个非常简单的 CMS 功能。 基本上我在这里尝试的是在字符串中有一个 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
    }

【问题讨论】:

  • 你确定要试试这个吗?你见过 Weceem weceem.org 它与 Grails 的集成非常好...
  • 你是对的。我检查了它,但我想在这里实现的是让这个实验发挥作用。与此同时,我会试试 weceem,因为到目前为止我听到了很多好消息

标签: grails content-management-system


【解决方案1】:

这不起作用,因为您实际上只是用字符串调用 render 。

在调用 sitemesh 过滤器时应用布局。为了让它工作,您必须将 sitemesh 装饰器应用于您的字符串。

当我们构建类似的功能时,我们所做的只是发送相关的页面片段:

即,

我的模板.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: '...' ] )

这与您尝试执行的操作具有相同的效果,但添加了站点网格(以及可能正确集成的插件)。

【讨论】:

  • 我明白你的意思。但是在您的示例中,您可以调用 render 因为您的模板位于文件系统上。有没有办法使用字符串中的模板(例如来自数据库)调用渲染(以及站点网格过滤器)并对其进行装饰?
  • 为了更深入的说明:我想将 gsp 存储在数据库中,并且我想用布局装饰来渲染它。到目前为止,这似乎已经不可能了......
  • 你可能可以。查看 applyLayout 标记的代码 - grails.org/doc/1.1/ref/Tags/applyLayout.html# - 您会看到对装饰器的额外调用。但是,您的装饰器链未在 gsp 中设置。您可能需要将渲染向下移动到过滤器链(通过拦截器或过滤器)或复制站点网格过滤器的功能。我的解决方案为此提供了一个简单的解决方法。
  • 你的意思是在文件系统上有一个模板,并通过模型传入 body 变量,取自数据库或其他什么?
  • 您的解决方案不允许将 taglib 调用包含到正文中,因为它们没有被解释
猜你喜欢
  • 2013-03-10
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
相关资源
最近更新 更多