页面布局

在 Web 页面中,页面布局,即 layout 是一个很重要的概念。

很多页面都会共用一些页面资源比如引用脚本、页头、页脚、导航等等,如果每个页面都需要重复地声明这些,不仅工作量繁重,而且维护更新也很困难。

因此定义页面布局供页面使用就可以避免这些问题。

1. 定义布局

定义布局很简单,只需要在页面中使用 #render-fragment 标记主页面内容位置即可。

比如下面我们在视图根目录下定义一个 layout.html 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>${title}</title>
</head>
<body>
    <div class="header">some common header</div>
    <div class="body">
        <!-- #render-fragment content -->
    </div>
    <div class="footer">some common footer</div>
</body>
</html>

注意 #render-fragment 后面的 content 名称不是固定的,你也可以叫其他名字,但需要与后面主页面使用时一一对应。

2. 使用布局

定义完布局,我们就可以在具体的页面中使用它。比如现在有一个 hello.html 文件,我们希望它使用上面定义的布局。

那么可以这样设置使用:

<!-- @ layout = layout -->
<!-- #fragment content-->
    <p>Hello World</p>
<!-- #endfragment -->

首先设置页面变量 layout 的值指向我们的布局文件,然后定义名为 content 的页面片段。

当我们访问并渲染 hello.html 文件的时候,页面片段中的内容将会被迁入布局文件中并返回。

页面变量的设置可以参考设置变量那一节的内容。

最终 hello.html 渲染结果如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <div class="header">some common header</div>
    <div class="body">
        <p>Hello World</p>
    </div>
    <div class="footer">some common footer</div>
</body>
</html>

3. 多处填充

值得一提的是,在布局页面中,可以定义不只一个 #render-fragment

这也是之前提到的 #render-fragment 需要指定一个名称的原因,这样在具体页面中就可以区分多个块分别进行内容填充。

当布局页面中有多个 #render-fragment ,具体页面可以不定义对应数量的 #fragment,Leap 会自动填充空白内容,不会报错。

4. 默认布局

Leap 暂时不提供默认布局的设置,需要开发人员的页面上使用 @layout=xxx 语法明确指定当前页面要使用的布局,不指定布局则按照普通页面渲染。

这样做的原因主要有几个:

  • 明确每个页面是否使用了布局以及使用了什么布局;

  • 规则简单:如果提供了默认布局的设置,那必然需要提供另外一种设置去配置哪些页面不需要默认布局,配置规则就会变得很复杂。

上一篇:模板引用 下一篇:合并资源

results matching ""

    No results matching ""