ButterCMSとAstro
ButterCMSは、プロジェクトで利用できる構造化されたコンテンツを公開可能なヘッドCMSとブログエンジンです。
Astroとの連携
セクションタイトル: Astroとの連携完全なブログサイトの例については、Astro + ButterCMS スタータープロジェクトをご覧ください。
このセクションでは、ButterCMS SDKを使ってデータをAstroプロジェクトに取り込む方法を解説します。
始めるには以下の手順に従ってください。
必須要件
セクションタイトル: 必須要件-
Astroプロジェクト - もしAstroプロジェクトをまだ持っていない場合は、自動CLIでAstroをインストールを見ると、すぐに使い始めることができます。
-
ButterCMSアカウント - もしアカウントを持っていない場合は、無料トライアルとして登録できます。
-
ButterCMS APIトークン - SettingsページからAPIトークンを見つけることができます。
セットアップ
セクションタイトル: セットアップ-
.env
ファイルをプロジェクトのルートディレクトリに作成し、環境変数にAPIトークンを追加します。.env BUTTER_TOKEN=APIトークンをここに記載環境変数のAstroの
.env
ファイルについてをご覧ください。 -
ButterCMS SDKを依存関係としてインストールします。
Terminal window npm install buttercmsTerminal window pnpm add buttercmsTerminal window yarn add buttercms -
プロジェクトに
src/lib/
を作り、そこへbutter.cms.js
を作成します。src/lib/buttercms.js import Butter from "buttercms";export const butterClient = Butter(import.meta.env.BUTTER_TOKEN);
これは、APIトークンを使用してSDKの認証を行い、プロジェクト全体で利用するためにエクスポートします。
データを取得する
セクションタイトル: データを取得するコンテンツを取得するために、このクライアントをインポートして、その中のretrieve
関数を使用します。
このサンプルでは、ショートテキストのname
と数字のprice
、そしてWYSIWYGのdescription
の3フィールドを持つコレクションを取得します。
---import { butterClient } from "../lib/buttercms";const response = await butterClient.content.retrieve(["shopitem"]);
interface ShopItem { name: string, price: number, description: string,}
const items = response.data.data.shopitem as ShopItem[];---<body> {items.map(item => <div> <h2>{item.name} - ${item.price}</h2> <p set:html={item.description}></p> </div>)}</body>
インターフェイスはフィールドタイプを反映しています。WYSIWYGのdescription
フィールドはHTML文字列としてロードされ、set:html
(EN)を使い描画します。
同様にページを取得してフィールドを表示できます。
---import { butterClient } from "../lib/buttercms";const response = await butterClient.page.retrieve("*", "simple-page");const pageData = response.data.data;
interface Fields { seo_title: string, headline: string, hero_image: string,}
const fields = pageData.fields as Fields;---<html> <title>{fields.seo_title}</title> <body> <h1>{fields.headline}</h1> <img src={fields.hero_image} /> </body></html>
もっと詳しく
セクションタイトル: もっと詳しくコミュニティリソース
セクションタイトル: コミュニティリソース- 追加してください!