コンテンツ・タイプ

デフォルト・コンテンツ・タイプ

多くのウェブと同様に、Grav のデフォルトのコンテンツ・タイプは HTML です。/blog/new-macbook-pros-soon のように拡張子なしでアクセスした場合、Grav は HTML ページを要求していると見なします。もし、あなたのページが blog-item.md というファイル名のページで定義されていた場合、Grav はページをレンダリングに blog-item.html.twig という Twig テンプレートを探します。

ユーザーが /blog/new-macbook-pros-soon.html を使って明示的に、拡張子を指定した要求をしても、Grav は同じ blog-item.html.twig ファイルを探します。

その他のコンテンツ・タイプ

Grav is a flexible platform however, and can actually serve up any content type you could wish for (xml, rss, json, pdf, etc.), you just have to provide a way to render it appropriately.
Grav は柔軟なプラットフォームであり、実際にはどんな種類のコンテンツ(xmlrssjsonpdf など)も提供することができ、それを適切にレンダリングする方法が提供されます。

例えば拡張子が .xml のルートを要求したとします。 /blog.xml をリクエストした場合、通常の blog.html.twig テンプレートを使ってレンダリングするのではなく、blog.xml.twig というテンプレートを探します。テンプレートが適切なXML構造を出力することを確認する必要があります。

JSONファイルを使う例

例えば、あるページの frontmattercontent を JSON 形式で取得したい場合で、そのページが item.md というファイルで定義されているとします。必要なのは、item.json.twig という Twig テンプレートを提供することだけです。これをテーマの templates/ フォルダに置くか、カスタムテンプレートを読み込むプラグインを使用している場合は、そこに追加することができます。

item.json.twig ファイルの中身は、次のようなものがあります。

{% set payload = {frontmatter: page.header, content: page.content}  %}
{{ payload|json_encode|raw }}

このTwigファイルが行うことは、frontmatter 形式のページヘッダとページ content で配列を作成し、Twig の json_encode フィルタを使ってエンコードすることだけです。

/blog/new-macbook-pros-soon.json という URL をリクエストすると、送信される出力は次のような形式になります。

{
   "frontmatter":{
      "title":"New Macbook Pros Arriving Soon",
      "date": "14:23 08/01/2016",
      "taxonomy":{
         "category":[
            "blog"
         ],
         "tag":[
            "apple",
            "mbpr",
            "laptops"
         ]
      }
   },
   "content":"<p>this has an -&gt; arrow here and <strong>bold</strong> here</p>\n<blockquote>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget nisl congue blandit sit amet id ligula. Praesent et nulla eu augue tempus sagittis. Mauris faucibus nibh et nibh cursus in vestibulum sapien egestas. Curabitur ut lectus tortor. Sed ipsum eros, egestas ut eleifend non, elementum vitae eros.\n-- <cite> Ronald Wade</cite></p>\n</blockquote>\n<p>Mauris felis diam, pellentesque vel lacinia ac, dictum a nunc. Mauris mattis nunc sed mi sagittis et facilisis tortor volutpat. Etiam tincidunt urna mattis erat placerat placerat ac eu tellus.</p>\n<p>This is a new paragraph</p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis.</p>"
}

JavaScript で簡単にパースして処理できる有効な JSON 形式でデータが出力されます。

カスタム・コンテンツ・タイプ

適切なコンテンツタイプでデータを送信するために、Grav はブラウザがそのコンテンツタイプをレンダリングするために期待する MIME タイプを知らせる必要があります。Grav は system/config/media.yaml ファイルに、標準的なコンテンツ・タイプのほとんどを記述しています。提供されていないコンテンツタイプを扱いたい場合は、このファイルにエントリを追加します。

例えば、iCal のカレンダーイベントをレンダリングできるようにしたい場合、このメディア・タイプを media.yaml に追加する必要があります。

ics:
    type: iCal
    thumb: media/thumb.png
    mime: text/calendar

これは、.ics 拡張子のファイルを、MIME タイプ : text/calendar として定義します。あとは、適切な .ical.twig テンプレートを提供すれば、このタイプのファイルをレンダリングすることができます。


オリジナル : https://learn.getgrav.org/17/content/content-types