カスタムブログレイアウトにデータを作成して渡す
ページ用のレイアウトができたので、ブログ記事用のレイアウトも追加しましょう!
ここで学ぶことは…
- Markdownファイル用の新しいブログ記事レイアウトを作成する
- レイアウトコンポーネントにYAMLフロントマターの値をpropsとして渡す
ブログ記事にレイアウトを追加する
セクションタイトル: ブログ記事にレイアウトを追加する.md
ファイルでフロントマターにlayout
プロパティを含めると、フロントマターのYAMLの値がレイアウトファイルで利用できるようになります。
-
src/layouts/MarkdownPostLayout.astro
に新しいファイルを作成します。 -
MarkdownPostLayout.astro
に以下のコードをコピーします。src/layouts/MarkdownPostLayout.astro ---const { frontmatter } = Astro.props;---<h1>{frontmatter.title}</h1><p>著者: {frontmatter.author}</p><slot /> -
post-1.md
に以下のフロントマタープロパティを追加します。src/pages/posts/post-1.md ---layout: ../../layouts/MarkdownPostLayout.astrotitle: '私の最初のブログ記事'pubDate: 2022-07-01description: 'これは私の新しいAstroブログの最初の記事です。'author: 'Astro学習者'image:url: 'https://docs.astro.build/assets/full-logo-light.png'alt: 'Astroのロゴ。'tags: ["astro", "ブログ", "公開学習"]--- -
ブラウザのプレビューで
http://localhost:4321/posts/post-1
を再度確認し、レイアウトによりページに追加された内容を確認します。 -
同じレイアウトプロパティを他のブログ記事
post-2.md
とpost-3.md
にも追加します。ブラウザで、これらの記事にもレイアウトが適用されていることを確認します。
レイアウトを使用すると、ページタイトルなどの要素をMarkdownコンテンツに含めるか、それともレイアウトに含めるかを選択できます。要素が重複しないよう、ページプレビューを目視で確認し、必要に応じて調整してください。
やってみよう - ブログ記事レイアウトをカスタマイズする
セクションタイトル: やってみよう - ブログ記事レイアウトをカスタマイズするチャレンジ: 各ブログ記事に共通する要素を特定し、MarkdownPostLayout.astro
を使用してそれらをレンダリングすることで、post-1.md
や将来のブログ記事で同じ記述を繰り返さないようにしてみましょう。
pubDate
をMarkdownの本文に書くのではなく、レイアウトコンポーネントに含めるようにコードをリファクタリングする例を以下に示します。
投稿日: 2022-07-01
Astroの学習についての私の _新しいブログ_ へようこそ!ここでは、新しいウェブサイトを作りながら、私の学習過程を共有します。
---const { frontmatter } = Astro.props;---<h1>{frontmatter.title}</h1><p>投稿日: {frontmatter.pubDate.slice(0,10)}</p><p>著者: {frontmatter.author}</p><slot />
自分にとって有用だと思う箇所はすべてリファクタリングし、レイアウトへの追加も必要なだけおこなってください。レイアウトに要素を1つ追加すると、各ブログ記事でそれを書く手間が省けることを忘れないでください。
以下は、個々のブログ記事のコンテンツのみスロットでレンダリングするようにリファクタリングしたレイアウトの例です。これを使っても良いですし、自分で作成しても構いません!
---const { frontmatter } = Astro.props;---<h1> {frontmatter.title}</h1><p>{frontmatter.pubDate.slice(0,10)}</p><p><em>{frontmatter.description}</em></p><p>著者: {frontmatter.author}</p><img src={frontmatter.image.url} width="300" alt={frontmatter.image.alt} /><slot />
レイアウトによってレンダリングされるものは、ブログ記事に入力する必要はありません。ブラウザのプレビューで重複を見つけた場合は、Markdownファイルからコンテンツを削除してください。
確認テスト
セクションタイトル: 確認テスト以下の2つのコンポーネントが有効なAstroコードとして機能するためには、空欄に何を入れる必要がありますか?
-
src/pages/posts/learning-astro.md ---layout: ../../__________/MyMarkdownLayout.astrotitle: "AstroにおけるMarkdownについて学ぶ"author: Astro学習者____: 2022-08-08---今日は多くのことを学びました!AstroではMarkdownで書くことができますが、フロントマターから変数を渡すこともできるのです。Astroのレイアウトコンポーネントでもこれらの値にアクセスできます。 -
src/layouts/MyMarkdownLayout.astro ---import ____________ from '../components/Footer.astro'const { ___________ } = Astro.props---<h1>{frontmatter.title}</h1><p>著者: {frontmatter.______}({frontmatter.pubDate}に投稿)</p>< _______ /><Footer />空欄に入る内容を見る。
-
src/pages/posts/learning-astro.md ---layout: ../../layouts/MyMarkdownLayout.astrotitle: "AstroにおけるMarkdownについて学ぶ"author: Astro学習者pubDate: 2022-08-08---今日は多くのことを学びました!AstroではMarkdownで書くことができますが、フロントマターから変数を渡すこともできるのです。Astroのレイアウトコンポーネントでもこれらの値にアクセスできます。 -
src/layouts/MyMarkdownLayout.astro ---import Footer from '../components/Footer.astro'const { frontmatter } = Astro.props---<h1>{frontmatter.title}</h1><p>著者: {frontmatter.author}({frontmatter.pubDate}に投稿)</p><slot /><Footer />
-