- Grav 插件
- Grav - 插件基础
- Grav - 插件教程
- Grav - 事件钩子
- Grav 管理面板
- Grav - 管理员介绍
- Grav - 管理员仪表盘
- Grav - 配置系统
- Grav - 站点配置
- Grav - 管理面板页面
- Grav - 页面编辑器选项
- Grav - 页面编辑器高级
- Grav 高级
- Grav - 蓝图
- Grav - 性能和缓存
- Grav - 调试和日志
- Grav - 命令行界面 (CLI)
- Grav - GPM (Grav Package Manager)
- Grav - 开发
- Grav - 生命周期
- Grav - YAML 语法
- Grav - 表单
- Grav 托管
- Grav - 网络托管
- Grav 故障排除
- Grav - 服务器错误
- Grav - 权限
- Grav 有用资源
- Grav - 面试问题
- Grav - 快速指南
- Grav - 有用资源
- Grav - 讨论
Grav - 主题变量
本章我们将了解 Grav 中的主题变量。在设计主题时,对象和变量可从 Twig 模板中访问,这些对象和变量由 Twig 模板框架读取和操作。
核心对象
Twig 模板有很多核心对象;每个对象都有一组变量和函数。
下表显示了变量及其简要描述。
序号 | 变量和描述 |
---|---|
1 | {{ base_dir }} 可以使用此变量获取 Grav 安装的基本文件目录。 |
2 | {{ base_url }} 可以使用此变量访问 Grav 站点的基本 URL。 |
3 | {{ base_url_relative }} 它返回 Grav 站点基本 URL 的相对路径。 |
4 | {{ base_url_absolute }} 它返回 Grav 站点基本 URL 的绝对路径。 |
5 | {{ theme_dir }} 它用于返回当前主题的文件目录文件夹。 |
6 | {{ theme_url }} 它用于返回当前主题的相对 URL。 |
config 对象
在configuration.yaml文件中,config 对象被设置为访问任何 Grav 配置设置。
{{ config.pages.theme }}
它将返回当前配置的主题。
site 对象
提供对config.site对象的别名,表示在site.yaml文件中设置的配置。
stylesheets 对象
这些对象提供一个用于存储 CSS 样式表资源的数组,可以循环添加 CSS 到模板中。
scripts 对象
这些对象提供一个包含 JavaScript 资源的数组,该数组会被循环遍历并将 JavaScript 添加到模板中。
page 对象
由于 Grav 的结构在pages/文件夹中定义,因此page 对象负责表示每个页面。page 对象包含有关您当前正在处理的页面的所有信息。
下表显示了 page 对象的方法。
序号 | 方法和描述 | 示例 |
---|---|---|
1 | summary([size]) 它提供页面内容的概要,指定大小作为参数。 如果未指定大小,则值将从system/config/site.yaml文件中的summary.size变量获取。 您也可以在内容中使用分隔符===。分隔符之前的內容将用于摘要。 |
{{ page.summary }} 或者 {{ page.summary(80) }} |
2 | content() 它用于获取页面的完整 HTML 内容。 |
{{ page.content }} |
3 | headers() 它返回在页面 YAML 前端内容中定义的页面标题。 |
title: About Us author: Johnson上述标题可以访问为 The author of this page is: {{ page.header.author }} |
4 | media() 它用于访问所有媒体文件,例如图像、视频和其他文件。它将返回一个包含与页面关联的所有媒体的数组。 |
{% set first_image = page.media|first %} {% set my_pdf = page.media['myfile.pdf'] %} {% for image in page.media.images %} {{ image.html }} {% endfor %} |
5 | title() 它设置为返回页面的标题,该标题在页面的 YAML 标题中定义。 |
title: My Page |
6 | menu() 返回menu变量的值,该值在页面的 YAML 标题中指定。如果未设置title变量,则默认为title。 |
title: My Blog menu: my blog page |
7 | visible() 它用于设置页面的可见性。通常,以数字后跟句点(即 01.foldername)结尾的页面会显示在菜单中,而不包含数字值的文件夹名称(即 foldername)则不可见。我们可以在页面标题中覆盖它。 |
title: About Us visible: true |
8 | routable() 通过这个我们可以确定一个页面是否可路由或不可路由,这意味着当您将浏览器指向页面时是否可以接收回内容。不可路由的页面可用于插件、模板等,这些页面无法直接访问。这在页面标题中设置。 |
title: My Page routable: true |
9 | slug() 使用此变量,我们可以获取页面 URL 中显示的直接名称。 |
my-page |
10 | url([include_host = false]) 它用于返回页面的 URL |
{{ page.url }} { # could return /myfolder/mypage #} 或者 {{ page.url(true) }} {# could return http: //mysite.com/ myfolder/mypage #} |
11 | route() 它用于返回页面的内部路由。 |
|
12 | home() 使用此变量,您可以确定页面是否配置为首页。当页面配置为首页时返回 true,否则返回 false。您可以在system.yaml文件中找到此设置。 |
|
13 | root() 它确定当前页面是否是层次结构的根页面。如果它是根页面则返回true,如果不是根页面则返回false。 |
|
14 | active() 您可以使用此变量确定浏览器是否正在访问当前页面。如果浏览器正在访问此页面,则返回true;否则返回false。 |
|
15 | modular() 使用此变量,我们可以确定此页面是否为模块化页面。如果是模块化页面则返回true,否则返回false。 |
|
16 | activeChild() 此变量可以确定此 URI 的 URL 是否包含活动页面的 URL;或者,简单来说,此页面的 URL 是否在当前 URL 中。当您处理导航并想要知道页面是否正在迭代相同的父页面时,这非常有用。 |
|
17 | find(url) 根据路由 URL 指定,此变量将返回 page 对象。 |
{% include 'modular/author-detail.html.twig' with {'page': page.find('/authors/ john-bloggs')} %} |
18 | collection() 此变量用于根据集合页面标题返回上下文的页面组。 |
{% for child in page.collection %} {% include 'partials /blog_item.html.twig' with {'page':child, 'truncate':true} %} {% endfor %} |
19 | isFirst() 如果当前页面是其同级页面的第一个,则返回true,否则返回false。 |
|
20 | isLast() 如果当前页面是其同级页面的最后一个,则返回true,否则返回false。 |
|
21 | nextSibling() 参考当前位置,它从数组中返回下一个同级页面。 |
|
22 | prevSibling() 参考当前位置,它从数组中返回上一个同级页面。 |
|
23 | children() 根据页面内容结构定义,此变量将返回子页面的数组。 |
|
24 | orderBy() 此方法返回排序后的子项的排序类型。可能包含的值为default、title、date和folder,这些值在页面标题中配置。 |
|
25 | orderDir() 此方法返回排序后的子页面的排序方向。值可以是asc(升序)或desc(降序)。通常这些值在页面标题中配置。 |
|
26 | orderManual() 此方法返回一个包含手动页面排序的数组,此排序将用于页面的任何子项。此值通常在页面标题中设置。 |
|
27 | maxCount() 此变量表示最多允许返回多少个子页面。通常在页面标题中指定值。 |
|
28 | children.count() 此变量返回页面有多少个子页面。 |
|
29 | children.current() 此变量将返回当前子项。 |
|
30 | children.next() 这将从子页面数组中返回下一个子项。 |
|
31 | children.prev() 这将从子页面数组中返回上一个子项。 |
|
32 | children.nth(position) 这将返回子项在子项数组中的位置。 |
|
33 | parent() 在嵌套树状结构中,当您想要向上导航到父页面时,可以使用此变量。它将返回当前页面的父页面对象。 |
|
34 | isPage() 使用此变量,您可以确定此页面是否具有实际的.md文件,或者它只是一个用于路由的文件夹。 |
|
35 | isDir() 使用此变量,您可以确定当前页面是否只是一个用于路由的文件夹。它根据情况返回true或false。 |
|
36 | id() 这将返回页面的唯一 ID。 |
|
37 | modified() 它返回页面上次修改的时间戳。 |
|
38 | date() 此方法返回页面的日期时间戳。通常在表示页面或帖子的日期的标题中配置。如果未提供值,则默认使用修改的时间戳。 |
|
39 | filePath() 通过这个,您可以获取页面的完整文件路径。 |
/Users/yourname/sites/ Grav/user/pages/ 01.home/default.md |
40 | filePathClean() 这将返回相对路径。 |
user/pages/ 01.home/default.md |
41 | path() 这将返回当前页面所在的目录的完整路径。 |
/Users/yourname /sites/ Grav/user/pages /01.home |
42 | folder() 这将返回页面的文件夹名称。 |
|
43 | taxonomy() 这将返回与页面连接的分类法数组。 |
pages 对象
Pages 对象表示为 page 对象的嵌套树。此嵌套树在创建导航、站点地图或查找特定页面时非常有用。
children 方法
这将返回一个包含子页面的 page 对象数组。具有树状结构的 page 对象可以迭代文件夹中的每个页面。
为了获取菜单的顶级页面,请使用以下代码。
<ul class = "navigation"> {% for page in pages.children %} {% if page.visible %} <li><a href = "{{ page.url }}">{{ page.menu }}</a></li> {% endif %} {% endfor %} </ul>
uri 对象
可以使用 Uri 对象的多种方法访问当前 URI 的部分。
http://mysite.com/Grav/section/category/page.json/param1:foo/param2:bar/?query1 = baz&query2 = qux:
下表显示了 Uri 对象的方法。
序号 | 方法和描述 | 示例 |
---|---|---|
1 | path() 可以使用此方法访问当前 url 的部分。 |
uri.path = /section/category/page |
2 | paths() 此方法返回路径元素数组。 |
uri.paths = [section, category, page]) |
3 | route([absolute = false][, domain = false]) 此方法返回绝对或相对URL的路由。 |
uri.route(true) = http://mysite.com/Grav/ section/category/page 或者, uri.route() = /section/category/page) |
4 | params() 这将返回URL中的参数部分。 |
uri.params = /param1:foo/param2:bar |
5 | param(id) 这将返回参数的值。 |
uri.param('param1') = foo |
6 | query() 可以使用此方法访问URL的查询部分。 |
uri.query = query1=bar&query2=qux |
7 | query(id) 使用此方法可以访问特定的查询项。 |
uri.query('query1') = bar |
8 | url([include_host = true]) 这将返回完整的URL,可能包含也可能不包含主机。 |
uri.url(false) = Grav/section/ category/page/param:foo?query = bar |
9 | extension() 这将返回扩展名,如果没有提供,则返回html。 |
uri.extension = json) |
10 | host() 这将返回URL的主机。 |
uri.host = mysite.com |
11 | base() 这将返回URL的基本部分。 |
uri.base = http://mysite.com |
12 | rootUrl([include_host = true]) 这将返回Grav实例的根URL。 |
uri.rootUrl() = http://mysite.com/Grav |
13 | referrer() 此方法返回页面的推荐者信息。 |
header 对象
它是原始页面page.header()的替代方法。当您循环遍历子页面时,使用原始页面 header 更合适。
content 对象
它是原始页面page.content()的替代方法。
taxonomy 对象
站点的所有分类信息都包含在全局taxonomy对象中。
browser 对象
Grav 使用内置支持以编程方式确定用户的平台、浏览器和版本。
{{ browser.platform}} # windows {{ browser.browser}} # chrome {{ browser.version}} # 24
添加自定义变量
自定义变量可以通过几种方式添加。如果您使用的是站点范围的变量,则将其放入user/config/site.yaml文件中,您可以像下面这样访问它。
{{ site.my_variable }}
如果变量仅适用于特定页面,则可以将其添加到YAML前端内容中,并使用page.header对象访问它。
例如:
title: My Page author: John
作者姓名可以这样访问:
The author of this page is: {{ page.header.author }}
添加自定义对象
可以使用插件将自定义对象添加到Twig对象中。这是一个高级主题,我们将在插件章节中看到更多信息。