可以通过Grails控制器选择布局吗?

时间:2010-04-07 21:40:27

标签: grails layout

我正在构建一个CMS作为Grails的学习练习,并希望内容管理员能够在不同的HTML页面结构之间进行选择(例如,2列,3列等)。

Grails Layouts似乎是一个合理的选择,但Grails控制器是否可以明确指出将用于渲染的布局?理想情况下,根据Ruby on Rails,layout方法会有一个render选项,但我看不到类似的东西。

似乎可以通过传递布局名称来使用applyLayout方法,但是这需要每个GSP页面显式请求布局(令人讨厌的每页开销),而不是使用Layout by Convention

有什么想法吗?

4 个答案:

答案 0 :(得分:5)

为什么不在模型中传递它并将其呈现在确定布局的元标记中?

<meta name="layout" content="${myValueFromController}"/>

我没有尝试过,但我认为它有效。

答案 1 :(得分:3)

我不知道如何按行动执行此操作,但您可以在控制器级别指定它,例如

class FooController {

   static layout = 'cms'

   def index = {}
   def foo = { ... }
   def bar = { ... }
}

答案 2 :(得分:2)

嘿,我想我有一个解决方案: 只需将Ted Naleids的想法与控制器的afterInterceptor结合使用:

foo.gsp:

<meta name="layout" content="${actionLayout}" />

FooController.groovy:

class FooController {

  def index = { 
    // do awesome stuff
  }

  def afterInterceptor = { model ->
    model.actionLayout = actionName}
  }
}

您现在唯一需要做的就是命名您的布局,例如您的操作或创建其他命名逻辑。

答案 3 :(得分:2)

也许我错过了一些东西,但是用一点taglib爱可以轻易解决这个问题吗?

E.g。

<g:if test="${controllerName == 'xyzController'}">
    <meta name="layout" content="xyzLayout"/>
</g:if>
<g:else>
    <meta name="layout" content="abcLayout"/>
</g:else>

我使用与此类似的东西来确定哪个选项卡应该在我的布局中应用了“选定”类。这允许我将所有导航html保留在布局中,同时仍然可以突出显示。有点不同于你所要求的,但似乎它可能(可能?)仍然有用......