樣板

樣板通過描述每個頁面應有的外觀,來定義網站的呈現方式。下表顯示了每個可用頁面相對應的樣板。最基本的情況下,一個主題應包含一個 index 樣板。

樣板 頁面 備用
index 首頁
post 文章 index
page 頁面 index
archive 封存 index
category 分類封存 archive
tag 標籤封存 archive

佈局

當頁面具有相似的結構時 – 例如,當兩個樣板都有標頭和頁尾時 – 您可以考慮使用 layout 來宣告這些結構上的相似之處。每個佈局檔案都應包含一個 body 變數,以顯示相關樣板的內容。例如:

index.ejs
index
layout.ejs
<!doctype html>
<html>
<body>
<%- body %>
</body>
</html>

產生

<!doctype html>
<html>
<body>
index
</body>
</html>

預設情況下,所有其他樣板都使用 layout 樣板。您可以在 front-matter 中指定其他佈局,或將其設定為 false 來停用它。甚至可以通過在頂層佈局中包含更多佈局樣板來建立複雜的巢狀結構。

局部

局部適用於在樣板之間共享元件。典型的例子包括標頭、頁尾或側邊欄。您可能需要將局部放在單獨的檔案中,以使維護網站更加方便。例如:

partial/header.ejs
<h1 id="logo"><%= config.title %></h1>
index.ejs
<%- partial('partial/header') %>
<div id="content">Home page</div>

產生

<h1 id="logo">My Site</h1>
<div id="content">Home page</div>

區域變數

您可以在樣板中定義區域變數,並在其他樣板中使用它們。

partial/header.ejs
<h1 id="logo"><%= title %></h1>
index.ejs
<%- partial('partial/header', {title: 'Hello World'}) %>
<div id="content">Home page</div>

產生

<h1 id="logo">Hello World</h1>
<div id="content">Home page</div>

最佳化

如果您的主題過於複雜,或者要產生的檔案數量過大,Hexo 的檔案產生效能可能會開始顯著下降。除了簡化主題之外,您也可以嘗試使用片段快取,這是在 Hexo 2.7 中引入的。

此功能借鑒自 Ruby on Rails。它會將內容儲存為片段並快取,以便在發出其他請求時使用。這可以減少資料庫查詢的次數,並且還可以加快檔案產生速度。

片段快取最適合用於標頭、頁尾、側邊欄或其他不太可能在樣板之間變更的靜態內容。例如:

<%- fragment_cache('header', function(){
return '<header></header>';
});

雖然使用局部可能會更容易

<%- partial('header', {}, {cache: true});

fragment_cache() 將快取渲染結果,並將快取的結果輸出到其他頁面。這只應在預期 **不會** 在不同頁面之間變更的局部上使用。否則,**不** 應啟用它。
例如,當在設定中啟用 relative_link 時,應停用它。這是因為相對連結在不同的頁面上可能會顯示不同。