テンプレートは、ウェブサイトの外観の構造を定義します。つまり、各ページがどのように表示されるべきか記述します。下記の表は、利用可能な各ページに対応するテンプレートを示しています。最低限、テーマにはindex
テンプレートが必要です。
テンプレート | ページ | フォールバック |
---|---|---|
index |
ホームページ | |
post |
記事 | index |
page |
ページ | index |
archive |
アーカイブ | index |
category |
カテゴリーアーカイブ | archive |
tag |
タグアーカイブ | archive |
レイアウト
ページが似通った構造を持つ場合(例えば、二つのテンプレートがヘッダーとフッターを持つ場合)、これらの構造上の類似性を宣言するためにlayout
を使用できます。すべてのレイアウトファイルには、該当するテンプレートの内容を表示するためのbody
変数が必要です。例えば:
index |
|
は次のようになります:
|
デフォルトでは、layout
テンプレートが他のすべてのテンプレートより使用されます。Front Matterで他のレイアウトを設定したり、false
に設定無効することができます。トップレイアウトにさらに多くのレイアウトテンプレートを含めることで、複雑なネスト構造を構築することも可能です。
パーシャル
パーシャルを利用し、テンプレート間でコンポーネントを共有できます。典型的な例には、ヘッダー、フッター、サイドバーなどがあります。メンテナンスを便利にするために、パーシャルを別のファイルに置くことができます。例えば:
<h1 id="logo"><%= config.title %></h1> |
<%- partial('partial/header') %> |
は次のようになります:
<h1 id="logo">My Site</h1> |
ローカル変数
テンプレート内でローカル変数を定義し、他のテンプレートから利用できます。
<h1 id="logo"><%= title %></h1> |
<%- partial('partial/header', {title: 'Hello World'}) %> |
は次のようになります:
<h1 id="logo">Hello World</h1> |
最適化
テーマが極端に複雑であるか、生成するファイルの数が非常に多い場合、Hexoのファイル生成の速度が大幅に低下することがあります。テーマを単純化する以外に、Fragment Cachingを試すことができます。これはHexo 2.7で導入されました。
この機能はRuby on Railsを参考にしています。コンテンツをフラグメントとして保存し、後で使われる時のためにキャッシュします。これにより、データベースクエリの回数を減らし、ファイル生成をスピードアップします。
Fragment cachingは、テンプレート間で変わらないと予想される、ヘッダー、フッター、サイドバー、その他の静的コンテンツに最適です。例えば:
<%- fragment_cache('header', function(){ |
パーシャルを使用する方が簡単かもしれません:
<%- partial('header', {}, {cache: true}); |
fragment_cache()
はレンダリング結果をキャッシュし、他のページにキャッシュされた結果を出力します。これは、異なるページ間で変更されることがないと予想されるパーシャルにのみ使用されるべきです。そうでなければ、有効にすべきではありません。
例えば、config内でrelative_link
が有効になっている場合は無効にすべきです。これは、相対リンクがページ間で異なるように見える可能性があるためです。