包括某些页面的特定内容
Include Specific Content For Some Pages
我有一个 layout.tml,我在其中定义了我希望每个页面都拥有的常见内容。但是,现在我遇到了一个问题,当我想为某个页面包含特定内容(例如营销)时。我想这是错误的想法,但在我的 layout.tml 中,我创建了 marketingBlock。我希望这个在我在某处调用它之前一直隐藏,例如 page2.tml,我希望该页面包含此块。问题是,它没有出现。
那我该怎么做呢?
<t:block id="marketingBlock">
<div class="row marketing">
<h4>Marketing Name</h4>
<img />
<p></p>
</div>
</t:block>
Layout.tml
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd" >
<head>
<title>${title}</title>
...
</head>
<body>
<div class="container">
<div class="header">
<nav>
...
</nav>
<h3 class="text-muted">Site Name</h3>
</div>
<t:body />
<!-- i want this portion to be included for some specific pages only -->
<t:block id="marketingBlock">
<div class="row marketing">
<h4>Marketing Name</h4>
<img />
<p></p>
</div>
</t:block>
<footer class="footer">
<p>© Company 2015</p>
</footer>
</div>
</body>
</html>
Page2.tml
<html t:type="layout" title="TapestryTest Index"
t:sidebarTitle="Framework Version"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
xmlns:p="tapestry:parameter">
<body>
<div class="content">
...
</div>
<t:block id="marketingBlock" />
</html>
反过来想想。您的 Layout class 是一个组件,与任何 Tapestry 组件一样,它可以有参数,参数可以是来自父页面的 HTML 块。因此,如果您希望每个页面向 Layout 组件提供不同的营销内容,您想要的方法是通过 Layout 组件的 "marketing" 参数将一个块从包含页面传递到 Layout 组件。
参见 http://tapestry.apache.org/layout-component.html 底部的示例——在该示例中,一块 CSS 被传递到 Layout 组件中,但它也可以很容易地成为一块 HTML.
所以你的 Page2.tml 看起来像这样:
<html t:type="layout" title="TapestryTest Index"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
xmlns:p="tapestry:parameter">
<p:marketing>
<div class="row marketing">
<h4>Marketing Name</h4>
<img />
<p></p>
</div>
</p:marketing>
<body>
<div class="content">
...
</div>
</body>
</html>
或者,如果您希望多个页面具有相同的营销内容,但允许某些页面根本没有营销内容,那么您应该将营销div 在您的布局模板中(如您的示例所示),并让每个父页面只传入一个布尔参数 ("showMarketing"),该参数控制 div 是否应该出现。然后您可以在布局中放置一个组件来测试该布尔值。
所以您的布局模板应该是这样的:
<t:if test="showMarketing">
<div class="row marketing">
<h4>Marketing Name</h4>
<img />
<p></p>
</div>
</t:if>
并且每个页面的顶部都会有一个像这样的 "showMarketing" 参数,设置为 "true" 或 "false":
<html t:type="layout" showMarketing="true" title="TapestryTest Index"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
xmlns:p="tapestry:parameter">
我有一个 layout.tml,我在其中定义了我希望每个页面都拥有的常见内容。但是,现在我遇到了一个问题,当我想为某个页面包含特定内容(例如营销)时。我想这是错误的想法,但在我的 layout.tml 中,我创建了 marketingBlock。我希望这个在我在某处调用它之前一直隐藏,例如 page2.tml,我希望该页面包含此块。问题是,它没有出现。
那我该怎么做呢?
<t:block id="marketingBlock">
<div class="row marketing">
<h4>Marketing Name</h4>
<img />
<p></p>
</div>
</t:block>
Layout.tml
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd" >
<head>
<title>${title}</title>
...
</head>
<body>
<div class="container">
<div class="header">
<nav>
...
</nav>
<h3 class="text-muted">Site Name</h3>
</div>
<t:body />
<!-- i want this portion to be included for some specific pages only -->
<t:block id="marketingBlock">
<div class="row marketing">
<h4>Marketing Name</h4>
<img />
<p></p>
</div>
</t:block>
<footer class="footer">
<p>© Company 2015</p>
</footer>
</div>
</body>
</html>
Page2.tml
<html t:type="layout" title="TapestryTest Index"
t:sidebarTitle="Framework Version"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
xmlns:p="tapestry:parameter">
<body>
<div class="content">
...
</div>
<t:block id="marketingBlock" />
</html>
反过来想想。您的 Layout class 是一个组件,与任何 Tapestry 组件一样,它可以有参数,参数可以是来自父页面的 HTML 块。因此,如果您希望每个页面向 Layout 组件提供不同的营销内容,您想要的方法是通过 Layout 组件的 "marketing" 参数将一个块从包含页面传递到 Layout 组件。
参见 http://tapestry.apache.org/layout-component.html 底部的示例——在该示例中,一块 CSS 被传递到 Layout 组件中,但它也可以很容易地成为一块 HTML.
所以你的 Page2.tml 看起来像这样:
<html t:type="layout" title="TapestryTest Index"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
xmlns:p="tapestry:parameter">
<p:marketing>
<div class="row marketing">
<h4>Marketing Name</h4>
<img />
<p></p>
</div>
</p:marketing>
<body>
<div class="content">
...
</div>
</body>
</html>
或者,如果您希望多个页面具有相同的营销内容,但允许某些页面根本没有营销内容,那么您应该将营销div 在您的布局模板中(如您的示例所示),并让每个父页面只传入一个布尔参数 ("showMarketing"),该参数控制 div 是否应该出现。然后您可以在布局中放置一个组件来测试该布尔值。
所以您的布局模板应该是这样的:
<t:if test="showMarketing">
<div class="row marketing">
<h4>Marketing Name</h4>
<img />
<p></p>
</div>
</t:if>
并且每个页面的顶部都会有一个像这样的 "showMarketing" 参数,设置为 "true" 或 "false":
<html t:type="layout" showMarketing="true" title="TapestryTest Index"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
xmlns:p="tapestry:parameter">