Skip to content

feat: 扩展 freemarker 实现 block

Created by: LIlGG

freemarker 扩展 block 用法

  1. 在需要组件化的 ftl 模板中,按照如下方式创建块。
<!-- layout.ftl -->
<!DOCTYPE html>
<html>
    <head>
        <@layout.block name="title">
            <title>标题</title>
        </@layout.block>
    </head>
    <body>
        <@layout.block name="header">
        <h1>页头</h1>
        </@layout.block>
      	<div class="content <@layout.block name='class'></@layout.block>">
            <@layout.block name="content">
            </@layout.block>
        </div>
        <@layout.block name="footer">
        <div>页脚</div>
        </@layout.block>
    </body>
</html>

自定义插槽标签为 <@layout.block> ,其属性 name 的值为块名称

  1. 在需要渲染和调用模板的地方,使用如下方式传入块内容。
<!-- index.ftl -->
<@layout.extends name="layout.ftl">
    <@layout.put block="title" type="replace">
        <title>自定义标题 - 替换模板内容</title>
    </@layout.put>
    <@layout.put block="header">
        <h2>第二级页头 - 默认放置在模板内容之后</h2>
    </@layout.put>
    <@layout.put block="class">sheet test-sheet</@layout.put>
    <@layout.put block="contents">
        <p>这是自定义页面内容</p>
    </@layout.put>
    <@layout.put block="footer" type="prepend">
        <hr/>
        <div class="footer">页脚内容 - 放置在模板内容之前</div>
    </@layout.put>
</@layout.extends>

自定义扩展标签为 <@layout.extends>  其属性 name 的值为组件化模板的相对路径【同 #include 的 path】 <@layout.put> 对应插槽标签,其属性 block 的值为块名称。type 有如下几个类型:

  • append - 追加内容到块内容之后,默认
  • prepend - 放置内容到块内容之前
  • replace - 替换块的内容,默认块的内容将被删除

合并请求报告