テーマで使えるデータ
💽
ここでは、テーマで使用できるデータについて説明していきます。
テーマで使えるデータ
テーマには、HTML の構造や見た目などを決めるテンプレートを使います。このテンプレート内では、サイトに関するいろんなデータを使うことができます。
どのテンプレートにも、次の4種類のデータが渡されます。
- サイトの設定情報(
nkssg.yml内の情報など) - すべての個別ページの情報
- すべてのアーカイブの情報
- テーマの設定情報(テーマ内の
ymlファイル内の情報など)
テーマで使いそうな主なものを以下に挙げていきます。
サイトの設定情報
サイトの設定情報は、config.mode などのように config から始めると取得できます。
config.sitenkssg.yml内で設定したsiteの情報。config.site.site_nameなどと書いて使う。config.site.site_urlの最後の「/」は削除されている。
config.mode- どのモードでサイトが作成されているか。
nkssg xxxを実行したときのxxxが入る。- 例えば
if config.mode != "build"とすれば、ビルド時以外に何かを実行するのに使える。
すべての個別ページの情報
すべての個別ページの情報は、singles から始めると取得できます。普通は、次のようにして各個別ページに対して何かを行うことが多いでしょう。
{% for single in singles %}
{% endfor %}
このように個別ページ single を取得したときに使えるデータのうち、主なものを以下に挙げていきます。
single.status- ステータス。
publish,draftなど。- フロントマターで設定したもの。
single.date,single.modified- 公開日時と修正日時。
{{ single.date.strftime('%Y/%m/%d') }}などとして表示できる。
single.is_draft- ドラフトかどうか。
if文で使える。
single.title,single.slug,single.file_id,single.summary- タイトル、スラッグ、file_id、要約。
single.content- 本文。
- Markdown は HTML に変換済み。
single.image- サムネイル。
- URL は、
single.image.urlで取得できる。
single.url- URL。
single.meta- フロントマター全体の辞書。
single.post_type、single.archive_type- 投稿タイプ、アーカイブタイプ。
- アーカイブタイプは、
date、section、noneのどれか。
single.prev_page、single.next_page- 前後の記事。
single.archive_list- その個別ページが属するアーカイブの一覧。
また、singles には、file_id から個別ページを取得できる get_single_by_file_id というメソッドがあります。
{% set page = singles.get_single_by_file_id(file_id) %}
例えば、サイドバーに特定の記事のリンクを載せたい場合などで使えます。
すべてのアーカイブの情報
すべてのアーカイブの情報は、archives から始めると取得できます。
archives.root_archives- ルートアーカイブの一覧。以下の3種類が入っている。
- 日付アーカイブの場合は
date。 - タクソノミーアーカイブの場合は、タクソノミー。
- セクションアーカイブの場合は、
post_typeの名前。
archives.pages- アーカイブページの一覧。
- ページネーションを加味した、すべてのページが入っている。
また、次のようにして各アーカイブに対して、何かを行うこともできます。
{% for archive in archives %}
{% endfor %}
このように各アーカイブ archive を取得したときに使えるデータのうち、主なものを以下に挙げていきます。
archive.name- アーカイブの名前。
archive.title- タイトル。
nameと同じ。
archive.slug- スラッグ。
- URL に使うことを想定。
archive.url- URL。
- 複数ページに分かれている場合は、1ページ目へのリンク。
archive.archive_type- アーカイブタープ。
- 日付、タクソノミー、セクションのうちのどれか1つ。
archive.is_root- ルートアーカイブかどうか。
archive.parent- 親アーカイブ。
archive.parents- 先祖アーカイブ。
- 親、親の親、その親、など、自分より上の親がリストになっている。
- ルートアーカイブから順番に入っている。
- パンくずリストなどで使うことができる。
archive.children- 子アーカイブ。
- 日付アーカイブの場合、
dateの子は年、年の子は月。 - タクソノミーアーカイブは、
nkssg.ymlで設定した親子関係を反映。 - セクションアーカイブは、フォルダ階層を親子関係とみなす。
archive.root_name- そのアーカイブのルートアーカイブ。
archive.singles- アーカイブに属する個別ページ一覧。
archive.singles_all- アーカイブとその子孫に属する個別ページ一覧。
archive.singles_all_count- アーカイブとその子孫に属する個別ページの数。
archive.singles_index- アーカイブの情報が含まれている個別ページ。
- セクションアーカイブのみで有効。
テーマの設定情報
テーマの設定ファイル(「テーマ名.yml」のこと)の情報も使うことができます。theme でアクセスできます。
例えば、テーマの設定ファイルで以下のように書いていたとします。
xxx: yyy
このとき、テンプレート内で theme.xxx と呼べば、yyy となります。
なお、親テーマと子テーマで同じ設定項目があると、子テーマで設定した値が優先されます。
特別なテンプレート内で使えるデータ
テンプレートによっては、サイトのデータ以外にも使えるデータがあります。
対象ページの情報
個別ページやアーカイブページのテンプレートでは、mypage を使って、対象ページの情報を取得することができます。
例えば、single.html 内で mypage.title と書いたとします。各記事ファイルから HTML を作る際に、mypage.title と書いた部分はその記事のタイトルに置き換わります。
mypage で扱えるデータ項目は、single や archive のところで見たものと同じです。
ページネーションの情報
アーカイブページのテンプレートでは、ページネーションに関する情報を使うことができます。そのアーカイブページに属する個別ページの一覧が入った pages と、ページネーションの情報 paginator が使えます。
例えば、2021年の記事が300個あったとしましょう。この300個の記事を一覧にして載せると、量が多くて見づらいですね。10個ずつくらいに区切って表示したほうが見やすくなります。
もし10個ずつ区切って表示するなら、pages は、10個の個別ページが入ったリストとなります。通常は、for 文を用いて、各個別ページのタイトル、リンク、サムネイルを表示することになるでしょう。
paginator を使うと、次のような情報を取得できます。
paginator.total_pages- すべてのページ数。
- 先ほどの例であれば、30。
paginator.pages- すべてのページ。
- 先ほどの例であれば、30ページのアーカイブページのリストになる。
paginator.paged- 現在ページのページ数。
- スタートは1から始まり、最後は
paginator.total_pagesと等しい値。
paginator.has_prev,paginator.has_next- 前のページがあるかどうか、次のページがあるかどうか。
paginator.prev,paginator.next- 前のページ、次のページ。
- ない場合は、
Noneが入る。
paginator.first,paginator.last- 最初のページと最後のページ。
中には、jinja の loop を使って取得できるものもあります。