レイアウトを組み合わせ、両方の長所を活かす
各ブログ記事にレイアウトを追加したところで、記事の見た目をサイトの他のページに近づけてみましょう!
ここで学ぶことは…
- メインのページレイアウトの中にブログ記事レイアウトを入れ子にする
2つのレイアウトを入れ子にする
ページ全体のレイアウトを定義するためのBaseLayout.astro
はすでにあります。
一方MarkdownPostLayout.astro
は、title
やdate
など、ブログ記事共通のプロパティに対応するテンプレートを提供しますが、ブログ記事ページはサイトの他のページとは異なる見た目になってしまっています。レイアウトを入れ子にすることで、ブログ記事の見た目をサイトの他のページに合わせてみましょう。
-
src/layouts/MarkdownPostLayout.astro
にBaseLayout.astro
をインポートし、テンプレートのコンテンツ全体を包みます。pageTitle
propを渡すのを忘れないでください。 -
http://localhost:4321/posts/post-1
をブラウザのプレビューで確認します。コンテンツは現在、以下によってレンダリングされています。- スタイル、ナビゲーションリンク、ソーシャルフッターを含むメインのページレイアウト
- 記事の説明文、日付、タイトル、画像などのフロントマタープロパティを含むブログ記事レイアウト
- この記事に表示されるテキストのみを含む個別のブログ記事のMarkdownコンテンツ
-
ページタイトルが各レイアウトで1回ずつ、合計2回表示されていることに注意してください。
MarkdownPostLayout.astro
からページタイトルを表示する行を削除します。 -
http://localhost:4321/posts/post-1
をブラウザのプレビューで再度確認し、上で削除した行が表示されなくなり、タイトルが1回だけ表示されていることを確認します。コンテンツが重複しないよう、必要に応じて他の調整をおこなってください。
以下のことを確認してください。
-
各ブログ記事は同じページテンプレートを表示しており、欠けているコンテンツはない。(ブログ記事のコンテンツが欠落している場合は、記事のフロントマタープロパティを確認してください。)
-
ページにコンテンツが重複していない。(2回レンダリングされているコンテンツがある場合は、
MarkdownPostLayout.astro
から削除してください。)
なお、好みに合わせてページテンプレートをカスタマイズしても構いません。
確認テスト
-
あるレイアウトを別のレイアウトの中に入れ子にし、個々のパーツを組み合わせることを可能にするのは以下のどれですか?
-
Markdownページを含むプロジェクトでは複数のレイアウトが特に有用です。これに当てはまるのは以下のどれですか?
-
各ページ共通のテンプレートは以下のどれですか?