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 /}, если хотите упростить задачу для своих дизайнеров.