テンプレートは、ウェブサイトの外観の構造を定義します。 つまり、各ページがどのように表示されるべきか記述します。 下記の表は、利用可能な各ページに対応するテンプレートを示しています。 最低限、テーマには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
が有効になっている場合は無効にすべきです。 例えば、config内でrelative_link
が有効になっている場合は無効にすべきです。 これは、相対リンクがページ間で異なるように見える可能性があるためです。