模板组合/多个控制器?

时间:2013-12-03 09:15:35

标签: playframework

我是Play框架的新手,我非常喜欢它,但我不明白如何解决以下问题 - 什么是正确的playframework方法?

我正在构建一个包含多个动态部分的复杂网站。让我们说一个横幅,一个带子菜单的菜单,一个主要内容部分,一个侧边栏部分和一个页脚。 Everthing是动态的并且可以自己工作,而且一些信息在"部分之间共享" (比如在菜单中突出显示所选类别)。

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

我想我必须将5个控制器(横幅,菜单,主要,侧边栏,页脚)注册到像/ blog / article / 1这样的网址,并且每个控制器都会呈现自己的部分,最后将所有内容放在一起网站。

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

请提供任何指示如何使用playframework 2.x。

谢谢你, 哈德

1 个答案:

答案 0 :(得分:2)

执行play new myapp时获得的骨架Play应用程序是一个良好的开端。它为您main.scala.html提供了所有网页共有的htmlheadbody标记,index.scala.html生成了所有网页内容body标记。页面的这两部分由index.scala.html放在一起,main()调用main并将其自己的内容作为块表达式传递。 (index实际上是Play模板解析器生成的单例视图对象,main.apply(title)(content)实际上正在调用main.scala.html)。

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

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

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