多くのウェブと同様に、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 は柔軟なプラットフォームであり、実際にはどんな種類のコンテンツ(xml
、rss
、json
、pdf
など)も提供することができ、それを適切にレンダリングする方法が提供されます。
例えば拡張子が .xml
のルートを要求したとします。 /blog.xml
をリクエストした場合、通常の blog.html.twig
テンプレートを使ってレンダリングするのではなく、blog.xml.twig
というテンプレートを探します。テンプレートが適切なXML構造を出力することを確認する必要があります。
例えば、あるページの frontmatter と content を 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 -> 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