Grav - 主题变量
在本章中,让我们了解Grav 中的主题变量。在设计主题时,可以从 Twig 模板访问对象和变量,并且这些对象和变量由 Twig 模板框架读取和操作。
核心对象
Twig模板有很多核心对象;每个对象都有一组变量和函数。
下表显示了变量及其简要说明。
先生。 | 变量和描述 |
---|---|
1 | {{ 基目录 }} 我们可以使用此变量获取 Grav 安装基本文件目录。 |
2 | {{base_url}} 可以使用此变量访问 Grav 站点的基本 url。 |
3 | {{base_url_relative}} 它返回 Grav 站点的基本 url 的相对路径。 |
4 | {{base_url_absolute}} 它返回 Grav 站点的基本 url 的绝对路径。 |
5 | {{ 主题目录 }} 它用于返回当前主题的文件目录文件夹。 |
6 | {{ 主题网址 }} 它用于返回当前主题的相对 URL。 |
配置对象
在configuration.yaml文件中,配置对象被设置为访问任何Grav配置设置。
{{ config.pages.theme }}
它将返回当前配置的主题。
站点对象
为config.site对象提供别名,表示site.yaml文件中设置的配置。
样式表对象
这些对象提供了一个用于存储 CSS 样式表资源的数组,可以循环该数组以将 CSS 添加到模板。
脚本对象
这些对象提供了一个由 JavaScript 资源组成的数组,该数组被循环并将 JavaScript 添加到模板中。
页面对象
由于Grav的结构是在pages/文件夹中定义的,因此页面对象负责表示每个页面。页面对象包含有关您当前正在处理的页面的所有信息。
下表显示了页面对象的方法。
先生。 | 方法及说明 | 例子 |
---|---|---|
1 | 摘要([大小]) 它给出了页面内容的要点,并以参数形式提供了指定的大小。 如果未指定大小,则从system/config/site.yaml文件中的summary.size变量获取该值。 您还可以在内容中分隔=== 。分隔符之前的内容将用于摘要。 |
{{ page.summary }} 或者 {{ page.summary(80) }} |
2 | 内容() 它用于获取页面的整个 HTML 内容。 |
{{ page.content }} |
3 | 标题() 它返回页面的 YAML front-matter 中定义的页面标题。 |
title: About Us author: Johnson可以通过以下方式访问上述标头: The author of this page is: {{ page.header.author }} |
4 | 媒体() 它用于访问所有媒体文件,例如图像、视频和其他文件。它将返回一个包含与页面关联的所有媒体的数组。 |
{% set first_image = page.media|first %} {% set my_pdf = page.media['myfile.pdf'] %} {% for image in page.media.images %} {{ image.html }} {% endfor %} |
5 | 标题() 它设置为返回在页面的 YAML 标头中定义的页面标题。 |
title: My Page |
6 | 菜单() 返回菜单变量的值,该值在页面的 YAML 标头中指定。如果未设置title变量,则默认为title。 |
title: My Blog menu: my blog page |
7 | 可见的() 它用于设置页面的可见性。通常菜单中会显示带有数值后跟句点的页面(即01.foldername),而不包含数值的文件夹名称(即foldername)则不可见。我们可以在页眉中覆盖它。 |
title: About Us visible: true |
8 | 可路由() 通过使用此功能,我们可以确定页面是否可路由,这意味着您在将浏览器指向该页面时是否可以接收返回的内容。不可路由的页面可以在插件、模板等中使用,并且这些页面不能直接访问。这是在页眉中设置的。 |
title: My Page routable: true |
9 | 蛞蝓() 通过使用此变量,我们可以获取页面 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 | 路线() 用于返回页面的内部路由。 |
|
12 | 家() 使用此变量您可以确定该页面是否配置为主页。当页面配置为主页时返回 true,未配置时返回 false。您可以在system.yaml文件中找到此设置。 |
|
13 | 根() 它确定当前页面是否是层次结构的根页面。如果它是根页面,则返回true;如果不是根页面,则返回false 。 |
|
14 | 积极的() 您可以通过该变量判断浏览器是否正在访问当前页面。如果浏览器正在访问此页面,则返回true ;如果没有,则返回false 。 |
|
15 | 模块化的() 通过使用这个变量,我们可以确定这个页面是否是模块化的。如果这是一个模块化页面,则返回true,否则返回false 。 |
|
16 | activeChild() 这个变量可以判断这个URI的URL是否有活动页面的URL;或者,简单地说,当前 URL 中的此页面的 URL。当您进行导航并且想知道页面是否在同一父页面上迭代时,这非常有用。 |
|
17 号 | 查找(网址) 根据路由 URL 的指定,该变量返回页面对象。 |
{% include 'modular/author-detail.html.twig' with {'page': page.find('/authors/ john-bloggs')} %} |
18 | 收藏() 此变量用于返回由集合页面标题确定的上下文的页面组。 |
{% for child in page.collection %} {% include 'partials /blog_item.html.twig' with {'page':child, 'truncate':true} %} {% endfor %} |
19 | isFirst() 如果当前页面是其同级页面的第一个,则返回true,否则返回false。 |
|
20 | 是最后一个() 如果当前页面是其同级页面的最后一个,则返回true,否则返回false。 |
|
21 | 下一个兄弟姐妹() 参考当前位置,它返回数组中的下一个同级页面。 |
|
22 | 上一个兄弟姐妹() 参考当前位置,它返回数组中的前一个同级页面。 |
|
23 | 孩子们() 正如页面内容结构中所定义的,子页面数组由此变量返回。 |
|
24 | orderBy() 此方法返回已排序的子项订单类型。可能包含的值有default、title、date和folder,这些值在页眉中配置。 |
|
25 | 订单目录() 此方法返回排序后的子页面的顺序方向。这些值可以是asc(升序)或desc (降序)。通常这些值在页眉中配置。 |
|
26 | 订单手册() 此方法返回一个由手动页面排序组成的数组,并且此排序适用于页面的任何子级。该值通常在页眉中设置。 |
|
27 | 最大计数() 该变量告诉最多允许返回多少个子页面。通常该值在页眉中指定。 |
|
28 | 儿童.count() 该变量返回一个页面有多少个子页面。 |
|
29 | 儿童.current() 该变量将返回当前的子项。 |
|
30 | 下一个() 这将从子页面数组中返回下一个子项目。 |
|
31 | 儿童.prev() 这将从子页面数组中返回前一个子项目。 |
|
32 | 孩子.nth(位置) 这将返回子级在子级数组中的位置。 |
|
33 | 父级() 在嵌套树结构中,当您想要导航回父页面时,可以使用此变量。它将返回当前页面的父页面对象。 |
|
34 | isPage() 通过使用此变量,您可以确定该页面是否具有实际的.md文件,或者只是一个用于路由的文件夹。 |
|
35 | isDir() 通过使用这个变量,您可以确定当前页面是否只是一个用于路由的文件夹。它根据它返回true或false 。 |
|
36 | ID() 这将返回页面的唯一 ID。 |
|
37 | 修改的() 它返回页面上次修改时间的时间戳。 |
|
38 | 日期() 此方法返回页面的日期时间戳。通常这是在表示页面或帖子日期的标题中配置的。如果默认情况下未提供值,则使用修改后的时间戳。 |
|
39 | 文件路径() 通过使用它,您可以获得页面的完整文件路径。 |
/Users/yourname/sites/ Grav/user/pages/ 01.home/default.md |
40 | 文件路径清理() 这将返回相对路径。 |
user/pages/ 01.home/default.md |
41 | 小路() 这将返回当前页面所在目录的完整路径。 |
/Users/yourname /sites/ Grav/user/pages /01.home |
42 | 文件夹() 这将返回页面的文件夹名称。 |
|
43 | 分类() 这将返回与页面相关的分类法数组。 |
页面对象
页面对象表示为页面对象的嵌套树。这种嵌套树在创建导航、站点地图或查找特定页面时非常有用。
儿童法
这将返回由子页面组成的页面对象数组。具有树状结构的页面对象可以在文件夹中的每个页面上迭代。
为了获取菜单的顶级页面,请使用以下代码。
<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 | 小路() 使用该方法可以访问当前url的部分内容。 |
uri.path = /section/category/page |
2 | 路径() 使用此方法返回路径元素数组。 |
uri.paths = [section, category, page]) |
3 | 路线([绝对=假][,域=假]) 此方法返回具有绝对或相对 URL 的路由。 |
uri.route(true) = http://mysite.com/Grav/ section/category/page 或者, uri.route() = /section/category/page) |
4 | 参数() 这将返回 URL 中的参数部分。 |
uri.params = /param1:foo/param2:bar |
5 | 参数(id) 这将返回参数的值。 |
uri.param('param1') = foo |
6 | 询问() 可以使用此方法访问 URL 的查询部分。 |
uri.query = query1=bar&query2=qux |
7 | 查询(id) 使用它您可以访问特定的查询项。 |
uri.query('query1') = bar |
8 | url([include_host = true]) 这将返回完整的 URL,其中可能包含也可能不包含主机。 |
uri.url(false) = Grav/section/ category/page/param:foo?query = bar |
9 | 扩大() 这将返回扩展名,或者如果未提供,则返回 html。 |
uri.extension = json) |
10 | 主持人() 这将返回 URL 的主机。 |
uri.host = mysite.com |
11 | 根据() 这将返回 URL 的基本部分。 |
uri.base = http://mysite.com |
12 | rootUrl([include_host = true]) 这将返回 Grav 实例的根 URL。 |
uri.rootUrl() = http://mysite.com/Grav |
13 | 推荐人() 该方法返回页面的referrer信息。 |
标头对象
它是原始页面的page.header()的替代品。当您循环访问子页面时,使用原始页面标题更为合适。
内容对象
它是原始页面的page.content()的替代品。
分类对象
站点的所有分类信息都包含在全局分类对象中。
浏览器对象
Grav 通过使用内置支持以编程方式确定用户的平台、浏览器和版本。
{{ browser.platform}} # windows {{ browser.browser}} # chrome {{ browser.version}} # 24
添加自定义变量
自定义变量可以通过多种方式添加。如果您使用站点范围的变量,请将其放入user/config/site.yaml文件中,您可以如下所示访问它。
{{ site.my_variable }}
如果变量仅适用于特定页面,那么您可以将其添加到 YAML front-matter 中并使用page.header对象访问它。
例如-
title: My Page author: John
作者姓名可以通过以下方式访问:
The author of this page is: {{ page.header.author }}
添加自定义对象
通过使用插件,您可以将自定义对象添加到 Twig 对象。这是一个高级主题,我们将在插件章节中看到更多信息。