Skip to content

Instantly share code, notes, and snippets.

@Adammatthiesen
Last active January 24, 2024 03:24
Show Gist options
  • Save Adammatthiesen/8bd008aef5aaf5d5f90d2e8014d533e8 to your computer and use it in GitHub Desktop.
Save Adammatthiesen/8bd008aef5aaf5d5f90d2e8014d533e8 to your computer and use it in GitHub Desktop.
astro-ghostCMS
CONTENT_API_KEY=YOURAPIKEY
CONTENT_API_URL=https://ghost.io
# For fresh Install
npm create astro@latest
# Create Empty Install with standard typescript
# Then Delete entire `pages` folder under `/src/`
npx astro add @matthiesenxyz/astro-ghostcms
import { defineConfig } from "astro/config";
import sitemap from "@astrojs/sitemap"; //optional but recommended
import GhostCMS from '@matthiesenxyz/astro-ghostcms';
// https://astro.build/config
export default defineConfig({
site: "https://YOUR-DOMAIN-HERE.com"
integrations: [GhostCMS()],
});
---
// IMPORT {GET} GhostAuthors Function
import { getGhostAuthors } from "@matthiesenxyz/astro-ghostcms";
// GET LIST OF ALL AUTHORS
const ghostAuthors = await getGhostAuthors();
---
---
// IMPORT {GET} GhostPostbySlug Function
import { getGhostPostbySlug } from '@matthiesenxyz/astro-ghostcms';
// GET SLUG from /blog/[slug]
const { slug } = Astro.params;
// GET CURRENT POST BY PASSING SLUG TO FUNCTION
const ghostPost = await getGhostPostbySlug(slug);
---
---
// IMPORT {GET} GhostPosts Function
import { getGhostPosts } from '@matthiesenxyz/astro-ghostcms';
// GET LIST OF ALL POSTS
const ghostPosts = await getGhostPosts();
---
---
// IMPORT {GET} GhostPostsbyTag, and GhostTagbySlug Functions
import { getGhostPostsbyTag, getGhostTagbySlug } from '@matthiesenxyz/astro-ghostcms';
// GET SLUG from /blog/tag/[slug]
const { slug } = Astro.params;
// GET TAG BY SLUG TO DISPLAY TAG INFO
const ghostTag = await getGhostTagbySlug(slug);
// GET POSTS FILTERED BY TAG SLUG
const ghostPosts = await getGhostPostsbyTag(slug)
---
---
// IMPORT {GET} GhostTags Function
import { getGhostTags } from "@matthiesenxyz/astro-ghostcms";
// GET LIST OF ALL TAGS
const ghostTags = await getGhostTags();
---
---
// IMPORT {GET} GhostFeaturedPosts Function
import { getGhostFeaturedPosts } from "@matthiesenxyz/astro-ghostcms";
// CREATE INTERFACE TO PASS 'setLimit' for POST LIMIT
interface Props {
setLimit?:number;
}
// IF 'setLimit' IS NOT DEFINED AS PROP THEN MAKE IT DEFAULT TO 'undefined'
const { setLimit = undefined } = Astro.props
// GET POSTS with Limit
const ghostPosts = await getGhostFeaturedPosts(setLimit);
---
---
// IMPORT {GET} GhostPostbySlug Function
import { getGhostPage } from '@matthiesenxyz/astro-ghostcms/api';
// GET SLUG from /blog/[slug]
const { slug } = Astro.params;
// GET CURRENT POST BY PASSING SLUG TO FUNCTION
const ghostpage = await getGhostPage(slug);
---
---
// IMPORT {GET} GhostAuthors Function
import { getGhostPages } from "@matthiesenxyz/astro-ghostcms/api";
// GET LIST OF ALL AUTHORS
const ghostPages = await getGhostPages();
---
---
// IMPORT {GET} GhostAuthors Function
import { getGhostSettings } from "@matthiesenxyz/astro-ghostcms/api";
// GET LIST OF ALL AUTHORS
const ghostSettings = await getGhostSettings();
---
---
// IMPORT {GET} GhostFeaturedPosts Function
import { getGhostRecentPosts } from "@matthiesenxyz/astro-ghostcms";
// CREATE INTERFACE TO PASS 'setLimit' for POST LIMIT
interface Props {
setLimit?:number;
}
// IF 'setLimit' IS NOT DEFINED AS PROP THEN MAKE IT DEFAULT TO 'undefined'
const { setLimit = undefined } = Astro.props
// GET POSTS with Limit
const ghostPosts = await getGhostRecentPosts(setLimit);
---
import rss from "@astrojs/rss";
import { getGhostPosts } from '@matthiesenxyz/astro-ghostcms';
export async function GET() {
const ghostPosts = await getGhostPosts();
return rss({
title: "Site Title",
description: "Site Description",
site: import.meta.env.SITE,
//stylesheet: '/rss/styles.xsl',
items: ghostPosts.map((ghostPost) => ({
title: ghostPost.title,
pubDate: ghostPost.published_at,
description: ghostPost.excerpt,
link: `/blog/${ghostPost.slug}/`,
})),
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment