カスタムブログレイアウトにデータを作成して渡す
ページ用のレイアウトができたので、ブログ記事用のレイアウトも追加しましょう!
ここで学ぶことは…
- Markdownファイル用の新しいブログ記事レイアウトを作成する
- レイアウトコンポーネントにYAMLフロントマターの値をpropsとして渡す
ブログ記事にレイアウトを追加する
.md
ファイルでフロントマターにlayout
プロパティを含めると、フロントマターのYAMLの値がレイアウトファイルで利用できるようになります。
-
src/layouts/MarkdownPostLayout.astro
に新しいファイルを作成します。 -
MarkdownPostLayout.astro
に以下のコードをコピーします。 -
post-1.md
に以下のフロントマタープロパティを追加します。 -
ブラウザのプレビューで
http://localhost:4321/posts/post-1
を再度確認し、レイアウトによりページに追加された内容を確認します。 -
同じレイアウトプロパティを他のブログ記事
post-2.md
とpost-3.md
にも追加します。ブラウザで、これらの記事にもレイアウトが適用されていることを確認します。
レイアウトを使用すると、ページタイトルなどの要素をMarkdownコンテンツに含めるか、それともレイアウトに含めるかを選択できます。要素が重複しないよう、ページプレビューを目視で確認し、必要に応じて調整してください。
やってみよう - ブログ記事レイアウトをカスタマイズする
チャレンジ: 各ブログ記事に共通する要素を特定し、MarkdownPostLayout.astro
を使用してそれらをレンダリングすることで、post-1.md
や将来のブログ記事で同じ記述を繰り返さないようにしてみましょう。
pubDate
をMarkdownの本文に書くのではなく、レイアウトコンポーネントに含めるようにコードをリファクタリングする例を以下に示します。
自分にとって有用だと思う箇所はすべてリファクタリングし、レイアウトへの追加も必要なだけおこなってください。レイアウトに要素を1つ追加すると、各ブログ記事でそれを書く手間が省けることを忘れないでください。
以下は、個々のブログ記事のコンテンツのみスロットでレンダリングするようにリファクタリングしたレイアウトの例です。これを使っても良いですし、自分で作成しても構いません!
レイアウトによってレンダリングされるものは、ブログ記事に入力する必要はありません。ブラウザのプレビューで重複を見つけた場合は、Markdownファイルからコンテンツを削除してください。
確認テスト
以下の2つのコンポーネントが有効なAstroコードとして機能するためには、空欄に何を入れる必要がありますか?
-
空欄に入る内容を見る。