2011-06-04 68 views
3

在播放框架视图中,您可以使用doLayout标记将代码主要导入基本模板文件。是否可以将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

是否要为两个doLayout标记插入相同的内容? – seb 2011-06-04 06:38:48

回答

1

使用doLayout标签,那么不,你不能达到你所要求的。 doLayout同时使用extends标签来确定将布局注入主布局的位置,但不包含任何参数。因此,如果您尝试多次调用doLayout,那么它如何知道哪个部分被注入?

我看到你有两个选择。

您拥有的第一个选项是使用includes标记代替。这将允许你做的东西像includedoLayout的区别

#{include 'head.html' /} 
your top layout code 
#{include 'middle-common.html' /} 
your bottom layout code 
#{include 'foot.html' /} 

的更多信息可以在这里找到 - What is the difference between doLayout and include in a template in 'Java Play!'?

你的第二个选择是使用CSS来适当地进行布局。从理论上讲,你应该能够把你的头部,并简单地使用CSS来正确定位。

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 declaractions。在any_page.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 --> 

:在的layout.html

:现在来创建复杂的布局,同时使用#SET和标签的#include这样

<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 /}标签中。

相关问题