Freemarker模板双重继承(child extends parent extends grandparent)
Freemarker templates double inheritence (child extends parent extends grandparent)
在 Freemarker 中,如何创建一个继承自本身继承的模板的模板?
单继承 与 <#nested>
标签一起工作:
文件base.ftl
:
<#macro layout>
<html lang="en">
<head>...</head>
<body>
<div>... (navigation bar)</div>
<div class="container">
<#nested>
</div>
</body>
</html>
</#macro>
文件normalBase.ftl
:
<#import "base.ftl" as base>
<@base.layout>
<div class="row">
<div class="col-md-9">
${content.body}
</div>
<div class="col-md-3">
<p>Latest releases</p>
<ul>....</ul>
</div>
</div>
</@base.layout>
如何将其转换为 双重继承 其中 useCaseBase.ftl
扩展 normalBase.ftl
扩展 base.ftl
?
这很有魅力:
文件base.ftl
:
<#macro layout>
<html lang="en">
<head>...</head>
<body>
... // Shared navigation bar
<div class="container">
<#nested>
</div>
... // Shared footer
</body>
</html>
</#macro>
<@layout>
${content.body}
</@layout>
文件normalBase.ftl
:
<#import "base.ftl" as parent>
<#macro layout>
<@parent.layout>
<div class="row">
<div class="col-md-9">
<#nested>
</div>
<div class="col-md-3">
... // Shared sidebar
</div>
</div>
</@parent.layout>
</#macro>
<@layout>
${content.body}
</@layout>
文件useCaseBase.ftl
:
<#import "normalBase.ftl" as parent>
<@parent.layout>
${content.body}
... // Shared content between all use case pages
</@parent.layout>
现在,我可以创建 *.adoc
个页面,其中 jbake-type
设置为 base
、normalBase
或 useCaseBase
,并且它有效。
在 Freemarker 中,如何创建一个继承自本身继承的模板的模板?
单继承 与 <#nested>
标签一起工作:
文件base.ftl
:
<#macro layout>
<html lang="en">
<head>...</head>
<body>
<div>... (navigation bar)</div>
<div class="container">
<#nested>
</div>
</body>
</html>
</#macro>
文件normalBase.ftl
:
<#import "base.ftl" as base>
<@base.layout>
<div class="row">
<div class="col-md-9">
${content.body}
</div>
<div class="col-md-3">
<p>Latest releases</p>
<ul>....</ul>
</div>
</div>
</@base.layout>
如何将其转换为 双重继承 其中 useCaseBase.ftl
扩展 normalBase.ftl
扩展 base.ftl
?
这很有魅力:
文件base.ftl
:
<#macro layout>
<html lang="en">
<head>...</head>
<body>
... // Shared navigation bar
<div class="container">
<#nested>
</div>
... // Shared footer
</body>
</html>
</#macro>
<@layout>
${content.body}
</@layout>
文件normalBase.ftl
:
<#import "base.ftl" as parent>
<#macro layout>
<@parent.layout>
<div class="row">
<div class="col-md-9">
<#nested>
</div>
<div class="col-md-3">
... // Shared sidebar
</div>
</div>
</@parent.layout>
</#macro>
<@layout>
${content.body}
</@layout>
文件useCaseBase.ftl
:
<#import "normalBase.ftl" as parent>
<@parent.layout>
${content.body}
... // Shared content between all use case pages
</@parent.layout>
现在,我可以创建 *.adoc
个页面,其中 jbake-type
设置为 base
、normalBase
或 useCaseBase
,并且它有效。