テーマで使えるデータ
💽
ここでは、テーマで使用できるデータについて説明していきます。
テーマで使えるデータ
テーマには、HTML の構造や見た目などを決めるテンプレートを使います。このテンプレート内では、サイトに関するいろんなデータを使うことができます。
どのテンプレートにも、次の4種類のデータが渡されます。
- サイトの設定情報(
nkssg.yml
内の情報など) - すべての個別ページの情報
- すべてのアーカイブの情報
- テーマの設定情報(テーマ内の
yml
ファイル内の情報など)
テーマで使いそうな主なものを以下に挙げていきます。
サイトの設定情報
サイトの設定情報は、config.mode
などのように config
から始めると取得できます。
config.site
nkssg.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
を使って取得できるものもあります。