- Grav 外掛
- Grav - 外掛基礎
- Grav - 外掛教程
- Grav - 事件鉤子
- Grav 管理面板
- Grav - 管理員介紹
- Grav - 管理員儀表盤
- Grav - 配置系統
- Grav - 站點配置
- Grav - 管理面板頁面
- Grav - 頁面編輯器選項
- Grav - 頁面編輯器高階
- Grav 高階
- Grav - 藍圖
- Grav - 效能和快取
- Grav - 除錯和日誌
- Grav - 命令列介面 (CLI)
- Grav - GPM (Grav Package Manager)
- Grav - 開發
- Grav - 生命週期
- Grav - YAML 語法
- Grav - 表單
- Grav 託管
- Grav - 網路託管
- Grav 故障排除
- Grav - 伺服器錯誤
- Grav - 許可權
- Grav 有用資源
- Grav - 面試問題
- Grav - 快速指南
- Grav - 有用資源
- Grav - 討論
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() 此方法返回排序後的子項的排序型別。可能包含的值為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 物件表示為 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物件中。這是一個高階主題,我們將在外掛章節中看到更多資訊。