Загрузчики сообщества для Content Layer Astro

Автор
Matthew Phillips

С момента добавления экспериментальной поддержки Astro Content Layer API мы увидели несколько loaders, созданных для разных типов контента. Мы уже выделили несколько CMS, создавших loaders. В этом посте разберём другие типы loaders, чтобы увидеть разнообразие use case для content layer.

Loaders, которые мы рассмотрим:

Notion

Notion — collaborative-платформа для всех типов документов. Хотя обычно её не считают CMS, многие используют именно так.

С notion-astro-loader можно синхронизировать документы Notion в одну из коллекций проекта. Loader автоматически выводит схему на основе схемы базы данных Notion.

Установите notion-astro-loader и настройте так:

import { defineCollection } from "astro:content";
import { notionLoader } from "notion-astro-loader";
const database = defineCollection({
loader: notionLoader({
auth: import.meta.env.NOTION_TOKEN,
database_id: import.meta.env.NOTION_DATABASE_ID,
filter: {
property: "Hidden",
checkbox: { equals: false },
},
}),
});
export const collections = { database };

Feed loader

Astro feed loader позволяет загружать RSS, RDF и Atom feeds и использовать данные на Astro-сайте. Use case много, поскольку RSS — широко используемый формат публикации. Например, можно использовать RSS для показа недавних релизов GitHub-проектов на сайте.

Чтобы использовать loader, установите пакет @ascorbic/feed-loader и определите коллекцию, указывающую на URL feed:

import { defineCollection } from "astro:content";
import { feedLoader } from "@ascorbic/feed-loader";
const releases = defineCollection({
loader: feedLoader({
url: "https://github.com/withastro/astro/releases.atom",
}),
})
const podcasts = defineCollection({
loader: feedLoader({
url: "https://feeds.99percentinvisible.org/99percentinvisible",
}),
})
export const collections = { releases, podcasts }

Stripe

С Stripe loader можно получать информацию о продуктах и ценах из Stripe API.

Для использования нужны пакеты stripe-astro-loader и stripe. Создайте экземпляр Stripe с API-ключом, передайте его loaders — и всё.

import { defineCollection } from "astro:content";
import { stripePriceLoader, stripeProductLoader } from "stripe-astro-loader";
import Stripe from "stripe";
const stripe = new Stripe("<API_KEY>");
const products = defineCollection({
loader: stripeProductLoader(stripe),
})
const prices = defineCollection({
loader: stripePriceLoader(stripe),
})
export const collections = { products, prices }

Airtable

Airtable — способ организовать данные и строить no-code приложения. С Airtable loader можно загружать записи из Airtable base и использовать их в Astro-проекте.

Airtable loader доступен из пакета @ascorbic/airtable-loader. Укажите API-ключ из переменной окружения и загрузите таблицу с loader.

import { defineCollection } from "astro:content";
import { airtableLoader } from "@ascorbic/airtable-loader";
const launches = defineCollection({
loader: airtableLoader({
base: import.meta.env.AIRTABLE_BASE,
table: "Product Launches",
}),
})
export const collections = { launches }

Strapi

Strapi — open-source headless CMS, которую можно self-host или использовать со Strapi Cloud. В Strapi можно создавать коллекции и кастомные content types.

Новый community-developed Strapi loader позволяет получать контент в локальные коллекции. Установите strapi-community-astro-loader из npm. В конфигурации Content Collections (src/content/config.ts) создайте коллекцию и вызовите loader с contentType, который хотите синхронизировать. В этом примере мы получаем все удалённые статьи и синхронизируем их в коллекцию posts.

import { defineCollection } from "astro:content";
import { strapiLoader } from "strapi-community-astro-loader";
const posts = defineCollection({
loader: strapiLoader({
contentType: "article"
}),
})
export const collections = { posts }

Также см. статью в блоге Strapi How To Create a Custom Astro Loader for Strapi Using Content Layer API.