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()

此方法返回排序后的子项的排序类型。可能包含的值为defaulttitledatefolder,这些值在页面标题中配置。

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()

使用此变量,您可以确定当前页面是否只是一个用于路由的文件夹。它根据情况返回truefalse

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对象中。这是一个高级主题,我们将在插件章节中看到更多信息。

广告