freemarker继承

freemarker有很好的继承机制,大体用法如下:

1
2
3
4
5
6
7
8
|
|__layout.ftl
|
|__changeClazz.ftl
|
|__module.ftl
|
|__center.ftl

父级文件 layout.ftl

1
2
3
4
5
6
7
8
9
10
11
12
<#marko page pageName="index" clazzName="t-center-bg1"> 
<!-- 此处暴露pageName和clazzName,可在子级中设置 -->

<div class="${clazzName!''}" data-page="${pageName!''}">
<div class="header"></div>

<#nested /> # 此处暴露接口

<div class="footer"></div>
</div>

</#macro>

子级文件

  • 无孙子文件changeClazz.ftl

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <#import "./layout.ftl" as temp />
    <!-- import 父文件layout.ftl -->

    @temp.page pageName='changeClazz' clazzName='t-center-bg2'>
    <!-- 设置layout的pageName 和 clazzName -->

    <div class="left"></div>
    <div class="center"></div>
    <div class="right"></div>

    </@temp.page>
  • 有孙子文件module.ftl

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <#import "./layout.ftl" as temp />
    <!-- import 父文件 -->

    <#marko center currentPage="index">
    <!-- 此处暴露currentPage,可在子级中设置 -->

    @temp.page pageName='center' clazzName='t-center-bg3'>
    <!-- 设置layout的pageName 和 clazzName -->

    <div class="left"></div>

    <div class="center" data-currentpage="${currentPage!''}">
    <div class="top"></div>

    <#nested /> # 此处暴露接口

    <div class="bototm"></div>
    </div>

    <div class="right"></div>

    </@temp.page>
    </#macro>

孙子文件center.ftl

1
2
3
4
5
6
7
8
9
<#import "module.ftl" as module>
<!-- import 父文件module.ftl -->

@module.center currentPage='1'>
<!-- 设置module的currentPage -->

<div class="main"></div>

</@module.page>