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

此方法返回已排序的子项订单类型。可能包含的值有defaulttitledatefolder,这些值在页眉中配置。

25

订单目录()

此方法返回排序后的子页面的顺序方向。这些值可以是asc(升序)或desc (降序)。通常这些值在页眉中配置。

26

订单手册()

此方法返回一个由手动页面排序组成的数组,并且此排序适用于页面的任何子级。该值通常在页眉中设置。

27

最大计数()

该变量告诉最多允许返回多少个子页面。通常该值在页眉中指定。

28

儿童.count()

该变量返回一个页面有多少个子页面。

29

儿童.current()

该变量将返回当前的子项。

30

下一个()

这将从子页面数组中返回下一个子项目。

31

儿童.prev()

这将从子页面数组中返回前一个子项目。

32

孩子.nth(位置)

这将返回子级在子级数组中的位置。

33

父级()

在嵌套树结构中,当您想要导航回父页面时,可以使用此变量。它将返回当前页面的父页面对象。

34

isPage()

通过使用此变量,您可以确定该页面是否具有实际的.md文件,或者只是一个用于路由的文件夹。

35

isDir()

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

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