Grav - 主题变量

在本章中,让我们了解 Grav 中的主题变量。在设计主题时,可以从 Twig 模板访问对象和变量,并且这些对象和变量由 Twig 模板框架读取和操作。

核心对象

Twig 模板有许多核心对象;每个对象都有一组变量函数

下表显示了带有简要说明的变量。

Sr.No. 变量和描述
1

{{ base_dir }>

我们可以使用此变量获取 Grav 安装基本文件目录。

2

{{ base_url }>

可以使用此变量访问 Grav 站点的基本 URL。

3

{{ base_url_relative }>

它返回基本 URL 到 Grav 站点的相对路径。

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 对象的方法。

Sr.No. 方法 &描述 示例
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()

使用此变量可以确定页面是否配置为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 的指定,页面对象由此变量返回。

{% 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 对象表示为页面对象的嵌套树。此嵌套树在创建导航、站点地图查找特定页面时非常有用。

children 方法

这将返回由子页面组成的页面对象数组。具有树状结构的页面对象可以遍历文件夹中的每个页面。

为了获取菜单的顶级页面,请使用以下代码。

<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 对象的方法。

Sr.No. 方法 &描述 示例
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)

这将返回 param 的值。

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() 的替代品。循环遍历子页面时,使用原始页面标题更为合适。

内容对象

它是原始页面的 page.content() 的替代品。

分类对象

网站的所有分类信息都包含在全局分类对象中。

浏览器对象

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

作者姓名可以作为 − 访问

此页面的作者是:{{ page.header.author }}

添加自定义对象

通过使用插件,您可以添加自定义对象到 Twig 对象。这是一个高级主题,我们将在插件章节中看到更多信息。