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() 此方法返回排序后的子页面顺序类型。可能包含的值有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 对象表示为页面对象的嵌套树。此嵌套树在创建导航、站点地图或查找特定页面时非常有用。
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 对象。这是一个高级主题,我们将在插件章节中看到更多信息。