feat: add newsletter to blog posts page
This commit is contained in:
parent
862acbd1f1
commit
03ce3caefd
3 changed files with 53 additions and 3 deletions
39
src/components/NewsLetter.astro
Normal file
39
src/components/NewsLetter.astro
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
---
|
||||||
|
const { listmonkInstance, listuuid } = Astro.props;
|
||||||
|
|
||||||
|
const inputId = Astro.props.listuuid.substring(0,5)
|
||||||
|
---
|
||||||
|
<details>
|
||||||
|
<summary>Subscribe to newsletter</summary>
|
||||||
|
<form method="post" action={`https://${listmonkInstance}/subscription/form`} class="listmonk-form">
|
||||||
|
<div>
|
||||||
|
<input type="hidden" name="nonce" />
|
||||||
|
|
||||||
|
<input type="email" name="email" required placeholder="E-mail" />
|
||||||
|
<input type="text" name="name" placeholder="Name (optional)" />
|
||||||
|
<input id={inputId} type="checkbox" name="l" checked="checked" value={listuuid} hidden />
|
||||||
|
|
||||||
|
<input type="submit" value="Subscribe" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</details>
|
||||||
|
<style>
|
||||||
|
input[type="email"], input[type="text"], input[type="submit"] {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
input[type="email"], input[type="text"] {
|
||||||
|
margin: 0.5rem 0;
|
||||||
|
background-color: #fefefe;
|
||||||
|
color: #111;
|
||||||
|
border: unset;
|
||||||
|
height: 1.5rem;
|
||||||
|
}
|
||||||
|
input[type="submit"] {
|
||||||
|
background-color: var(--terminal-green);
|
||||||
|
color: var(--bg-color);
|
||||||
|
border: unset;
|
||||||
|
padding: 0.2rem;
|
||||||
|
height: 1.5rem;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -28,14 +28,19 @@ export const siteConfig = {
|
||||||
searchEngine: 'duckduckgo', // 'google', 'duckduckgo', 'bing' (broken until M1cr0$0ft get support for it), defaults to 'google'
|
searchEngine: 'duckduckgo', // 'google', 'duckduckgo', 'bing' (broken until M1cr0$0ft get support for it), defaults to 'google'
|
||||||
// content
|
// content
|
||||||
displayAvatar: true, // display author avatar in the article list and info line of article page
|
displayAvatar: true, // display author avatar in the article list and info line of article page
|
||||||
|
newsletter: {
|
||||||
|
enabled: false, // enable newsletter subscription in post list page
|
||||||
|
type: 'listmonk', // only 'listmonk' is supported for now, more will be added later
|
||||||
|
listmonk: {
|
||||||
|
instanceDomain: 'listmonk.yourdomain.com', // the domain of your listmonk instance
|
||||||
|
listuuid: '3546fc35-fd75-4163-936a-114514191981', // the id of the list to subscribe to, can be found in the listmonk admin panel
|
||||||
|
}
|
||||||
|
},
|
||||||
// encryption
|
// encryption
|
||||||
// the global password to encrypt/decrypt the content, if set, all <ProtectedContent/> without specifying a password will be encrypted with this password
|
// the global password to encrypt/decrypt the content, if set, all <ProtectedContent/> without specifying a password will be encrypted with this password
|
||||||
// To use an environment variable to set the password, replace the value with `import.meta.env.CONTENT_PASSWORD`
|
// To use an environment variable to set the password, replace the value with `import.meta.env.CONTENT_PASSWORD`
|
||||||
// (or process.env.CONTENT_PASSWORD, CONTENT_PASSWORD can be any string) and set the environment variable in your deployment service.
|
// (or process.env.CONTENT_PASSWORD, CONTENT_PASSWORD can be any string) and set the environment variable in your deployment service.
|
||||||
contentPassword: 'p1easeChangeMe!',
|
contentPassword: 'p1easeChangeMe!',
|
||||||
// footer
|
|
||||||
// yes you can write html safely here
|
|
||||||
customFooter: '<i>I have no mouth, and I must SCREAM</i>',
|
|
||||||
// comments
|
// comments
|
||||||
comments: {
|
comments: {
|
||||||
type: 'artalk', // 'artalk','giscus','fediverse','email','hatsu'
|
type: 'artalk', // 'artalk','giscus','fediverse','email','hatsu'
|
||||||
|
@ -83,6 +88,9 @@ export const siteConfig = {
|
||||||
instanceDomain: '',
|
instanceDomain: '',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
// footer
|
||||||
|
// yes you can write html safely here
|
||||||
|
customFooter: '<i>I have no mouth, and I must SCREAM</i>',
|
||||||
// umami analytics
|
// umami analytics
|
||||||
// by enabling this, you can track the visitors of your site
|
// by enabling this, you can track the visitors of your site
|
||||||
siteAnalytics: {
|
siteAnalytics: {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
---
|
---
|
||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
import { getCollection } from 'astro:content';
|
import { getCollection } from 'astro:content';
|
||||||
|
import NewsLetter from "../components/NewsLetter.astro";
|
||||||
|
import {siteConfig} from "../config";
|
||||||
|
|
||||||
const posts = await getCollection('posts');
|
const posts = await getCollection('posts');
|
||||||
posts.sort((a, b) => new Date(b.data.pubDate).getTime() - new Date(a.data.pubDate).getTime());
|
posts.sort((a, b) => new Date(b.data.pubDate).getTime() - new Date(a.data.pubDate).getTime());
|
||||||
|
@ -38,6 +40,7 @@ posts.sort((a, b) => new Date(b.data.pubDate).getTime() - new Date(a.data.pubDat
|
||||||
<br />
|
<br />
|
||||||
<a href="/rss.xml" style="margin-left: 1rem;">Subscribe to RSS feed</a>
|
<a href="/rss.xml" style="margin-left: 1rem;">Subscribe to RSS feed</a>
|
||||||
</p>
|
</p>
|
||||||
|
{siteConfig.newsletter.enabled && <NewsLetter listmonkInstance={siteConfig.newsletter.listmonk.instanceDomain} listuuid={siteConfig.newsletter.listmonk.listuuid} />}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Layout>
|
</Layout>
|
Loading…
Add table
Add a link
Reference in a new issue