我是Play框架的新手,我非常喜欢它,但我不明白如何解决以下问题 - 什么是正确的playframework方法?
我正在构建一个包含多个动态部分的复杂网站。让我们说一个横幅,一个带子菜单的菜单,一个主要内容部分,一个侧边栏部分和一个页脚。 Everthing是动态的并且可以自己工作,而且一些信息在"部分之间共享" (比如在菜单中突出显示所选类别)。
例如,主要内容部分显示了博客文章。因此菜单应显示所有类别,并突出显示所选类别。横幅和页脚部分不依赖于主要部分,因此没有信息交换。
我想我必须将5个控制器(横幅,菜单,主要,侧边栏,页脚)注册到像/ blog / article / 1这样的网址,并且每个控制器都会呈现自己的部分,最后将所有内容放在一起网站。
这也应该在我的控制器之间提供松耦合。 "页脚"控制器只是不知道有一个"横幅"控制器。
请提供任何指示如何使用playframework 2.x。
谢谢你, 哈德
答案 0 :(得分:2)
执行play new myapp
时获得的骨架Play应用程序是一个良好的开端。它为您main.scala.html
提供了所有网页共有的html
,head
和body
标记,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}},它将生成该内容的一部分。布局。