返回首页 Harp 中文文档
EJS

如何在每一页上获取到自定义标题和描述

本篇文章将教你如何设置你的应用,让你在每一页设定自定义标题和描述,而且当没有设定时有一个安全的默认值。

默认值将会在 _harp.json 文件中指定,然后我们将使用 _data.json 文件覆盖哪些值。

你可以在文档中找到更多关于 模板数据 的信息。

概览

目录结构:

_harp.json
_data.json
index.jade  // or index.ejs
about.jade  // or about.ejs

这个例子中,这是我们所希望的:如果一个访问者请求 index 页面,我们展示标题和描述的默认值,当他们请求 about 页面,我们显示自定义的值。

设置默认值

首先,我们将指定默认值,如果页面没有指定具体数值时,会用到。在你的 _harp.json 中:

{
  "globals": {
    "title": "My default title",
    "description": "My default description"
  }
}

设置 about 页面的自定义值

_data.json 文件中添加你想要为 about 页面添加的自定义值:

{
  "about": {
    "title": "Welcome to my about page",
    "description": "I’m awesome and so are you"
  }
}

在模板文件中使用

如果你正在使用 Jade

现在我们将在 _layout.jade 中使用我们刚刚添加到 _harp.json 中的标题和描述。

doctype
html(lang="en")
  head
    title= title
    meta(name="description" content="#{ description }) body !=yield

如果你正在使用 EJS

如果你正在使用 EJS,_layout.ejs 应该是这样的:

<!DOCTYPE html>
<html lang="en">
  <head>
    <title><%= title %></title>
    <meta name="description" content="<%= description %>" />
  </head>
  <body> <%- yield %> </body>
</html>

结果

现在当你访问 index 页面时,Harp 将会渲染 _harp.json 中指定的默认值。

当你访问 about 页面时,Harp 将会用 _data.json 中指定的值覆盖默认的标题和描述变量。

如果你希望在 index 页面中显示自定义值,你只需要在 _data.json 文件中添加 index 键值,像这样:

{
  "about": {
    "title": "Welcome to my about page",
    "description": "I’m awesome and so are you"
  },
  "index": {
    "title": "This is my home page",
    "description": "Best home page ever"
  }
}

记住你并不需要同时覆盖两个变量。如果你只覆盖 title 变量,模板文件将会仍然为 description 变量使用默认值。

这是如何做到的?

_harp.js 中指定的全局变量值,是可以作为模板变量使用的,所以它们可以在任何时候以及任何页面使用。

当一个 Harp 应用试图渲染一个页面,它会尝试将 url 路径与 _data.json 中的数据进行匹配。在这种情况中,它将 URL 路径中的 about 部分与 _data.json 文件中的 about 键值匹配起来。

当 Harp 找到一个匹配时,它会使得当前渲染的模板可访问那些变量。并且在这种情况中,它会覆盖我们之前在 _harp.json 中设置的变量。

你可以在文档中找到更多关于 模板数据 的信息。