feat: 扩展 freemarker 实现 block
Created by: LIlGG
freemarker 扩展 block 用法
- 在需要组件化的 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 的值为块名称
- 在需要渲染和调用模板的地方,使用如下方式传入块内容。
<!-- 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 - 替换块的内容,默认块的内容将被删除