Playframework 模板合成/多个控制器?

Playframework 模板合成/多个控制器?,playframework,Playframework,我不熟悉play框架,我非常喜欢它,但我不知道如何解决以下问题-什么是正确的play框架方法 我正在构建一个包含多个动态部分的复杂网站。比如一个横幅,一个带有子菜单的菜单,一个主要内容部分,一个侧边栏部分和一个页脚。尽管某些信息在“部件”之间共享(如在菜单中突出显示所选类别),但每件事都是动态的,并独立工作 例如,主要内容部分显示一篇博客文章。因此,菜单应显示所有类别,并突出显示所选类别。横幅和页脚部分不依赖于主体部分,因此没有信息交换 我想我必须注册5个控制器(横幅、菜单、主栏、侧栏、页脚)到

我不熟悉play框架,我非常喜欢它,但我不知道如何解决以下问题-什么是正确的play框架方法

我正在构建一个包含多个动态部分的复杂网站。比如一个横幅,一个带有子菜单的菜单,一个主要内容部分,一个侧边栏部分和一个页脚。尽管某些信息在“部件”之间共享(如在菜单中突出显示所选类别),但每件事都是动态的,并独立工作

例如,主要内容部分显示一篇博客文章。因此,菜单应显示所有类别,并突出显示所选类别。横幅和页脚部分不依赖于主体部分,因此没有信息交换

我想我必须注册5个控制器(横幅、菜单、主栏、侧栏、页脚)到一个url,如/blog/article/1,每个控制器呈现自己的部分,最后所有内容都被整合到一个复杂的网站上

这也应该在我的控制器之间提供松耦合。“页脚”控制器不必知道有一个“横幅”控制器

请提供如何使用playframework 2.x完成此操作的任何指针

谢谢,,
Bernhard

当你玩新的myapp时,你会得到一个骨架播放应用程序,这是一个好的开始。它为您提供了
main.scala.html
,其中包含所有页面通用的
html
head
body
标记,以及
index.scala.html
,它在
body
标记中生成内容。页面的这两部分由
index.scala.html
组合在一起,它调用
main()
,并将自己的内容作为块表达式传递。(
main
实际上是播放模板解析器生成的单例视图对象,
index
实际调用的是
main.apply(title)(content)

我生成导航/菜单的方法大致如下:

  • My
    main.scala.html
    函数具有签名
    @(标题:String)(隐式请求:RequestHeader)
  • 所有控制器操作现在都必须具有隐式请求参数
  • 我在
    views.html
    包(例如
    views.html.Menus
    )中有一个helper对象,其方法类似于
    def renderMainMenu()(隐式请求:RequestHeader):play.api.templates.html
    。此方法生成菜单/子菜单/导航。它查看
    req.uri
    以确定要突出显示哪些菜单项,或者显示哪些面包屑

main.scala.html
实际上是一个布局。如果您的设计有侧边栏和页脚,您可以将它们实现为视图,并从
main
的相应部分调用它们。就您的博客示例而言,您将(例如)在路由文件中有一个条目
/blog/article/:articleId
,一个动作
controllers.Application.blog(articleId)
,以及一个视图
blog.scala.html
,它将生成布局的内容部分。

Hi!谢谢你的回答。不幸的是,我不理解它,因为我是Java开发人员,而不是Scala。我应该提一下。看来我需要更多的基本帮助,这对stackoverflow来说可能太多了。所以我在这里发布了一个咨询请求:当我得到答案(我理解)时,我会在这里发布。非常感谢。Play框架中的视图在scala中,因此如果您在Java中使用Play,Richard所说的一切都是一样的。唯一不同的部分是“我在views.html中有一个helper对象…”它可以翻译为:“我有一个带有静态方法public static play.api.templates.html renderMainMenu(RequestHeader头)的helper类。这个方法生成菜单/子菜单/导航…”另外,您必须将视图视为函数。因此,每个视图都是函数调用,每个视图都可以调用其他视图并将主体作为参数传递。因此,当您创建一个新的应用程序时,您会看到索引视图调用带有主体的主视图。