在play框架视图中,您可以使用doLayout标记将代码主要导入到基本模板文件中。
但是说我在我的基础文件中有一些完全分离的区域,例如
<html>
<head></head>
<body>
<div1>doLayout</div1>
<div2>some text in here thats standard across all views...</div2>
<div3>doLayout..again</div>
</body>
</html>
所以在我使用这个基本html文件的视图中,我可能想要在div1中的照片和div 2中的某些文本链接,但我希望将doLayouts分开并考虑将它们分开的内容(div2)
答案 0 :(得分:4)
Play支持强大的#{set /}标记,可让您提供代码片段并将其分配给HTML页面中的占位符。例如,您可能会在某些代码示例中看到这一点(不记得是哪一个)。
在layout.html中:
<head>
<link href="skin.css'}" rel="stylesheet" type="text/css" media="all" />
#{get 'moreStyles' /}
</head>
在any_page.html中:
<div id='normal_dolayout_body'>
<p>This is the doLayout body</[p>
</div>
#{set 'moreStyles'}
<link href="extra.css" rel='stylesheet' type='text/css' media='all' />
#{/set}
结果页面将同时具有CSS声明。现在,要创建复杂的布局,请同时使用#set和#include标记:
layout.html中的:
<!--div.container start -->
<div class="container">
<div class="center">
<div id="layout">
<div id='content'>
#{doLayout/}
</div>
<div id='sidebar'>
#{get 'sidebar'/}
</div>
</div>
</div>
<!--div.container end -->
<!--div.footer start -->
<div class="footer">
#{get 'promo' /}
#{get 'footerlinks' /}
</div>
<!--div.footer end -->
在any_page.html中:
<div id='normal_body'>Will be included by doLayout</div>
<!-- You may have any number of #set tags which will be matched with any #get declared in your main layout. -->
#{set 'promo'}
#{include 'my_custom_promo.html'/}
#{/set}
#{set 'sidebar'}
#{if user.isHappy }
#{include '/Commons/happy_user_sidebar.html' /}
#{/if}
#{else}
#{include '/Commons/default_sidebar.html' /}
#{/else}
#{/set}
促销和侧边栏块将注入模板中关联的#get占位符。
您可以使用#set和include标记,将DRY原则应用于页面程序集,使用类似块的方法来组合自定义页面内容。您甚至可以定义自己的自定义标记,以便在一个漂亮的#{sidebar user:user /}标记中隐藏复杂的逻辑,如果您想让设计人员更轻松的话。
答案 1 :(得分:1)
使用doLayout
标签,然后不,您无法实现您的要求。 doLayout
串联使用extends
标记来确定布局注入主布局的位置,但它不带参数。因此,如果您尝试多次调用doLayout,那么它将如何知道正在注入哪个部分?
我看到你有两种选择。
您拥有的第一个选项是使用includes
标记。这将允许您执行类似
#{include 'head.html' /}
your top layout code
#{include 'middle-common.html' /}
your bottom layout code
#{include 'foot.html' /}
有关include
和doLayout
之间差异的更多信息,请访问此处 - What is the difference between doLayout and include in a template in 'Java Play!'?
您的第二个选择是使用CSS来正确执行布局。理论上,你应该能够把你的标题放在标题中,并简单地使用CSS来正确定位它。