Adding Comment Systems to Frosti

Adding Comment Systems to Frosti

周二 4月 15 2025 Waline
479 字 · 5 分钟
加载中...

Introduction

One of the essential features of any blog is the ability for readers to engage with your content through comments. While Frosti provides an excellent foundation for your Astro-based blog, adding a comment system requires a few additional steps. This guide will walk you through integrating the Waline comment system into your Frosti blog.

Static sites like those built with Astro don’t have built-in comment systems since they lack server-side processing. However, we can use third-party comment services that handle the backend for us, while we integrate their frontend components into our site.

Creating Comment Components in Astro

Before diving into a specific comment system, let’s understand how to create and use components in Astro. We’ll create a reusable component that can be easily added to any page.

Component Structure

We’ll create our comment component in the src/components/comments directory. First, let’s ensure this directory exists:

BASH
mkdir -p src/components/comments

Integrating Waline

Waline↗ is a simple, safe, and feature-rich comment system with backend and frontend separation. It is highly customizable and easy to set up.

Step 1: Set Up Waline Backend

Before adding Waline to your site, you need to set up the backend:

  1. Create a LeanCloud application to store your comments.
  2. Deploy the Waline server to Vercel or another hosting platform.

Follow the official Waline guide↗ to set up your backend service. After deploying, you’ll get a server URL that you will need for the frontend component.

Step 2: Create the Waline Component

Let’s create a reusable Waline component:

BASH
touch src/components/comments/Waline.astro

Add the following code to this component:

ASTRO
---
// Props interface
interface Props {
  serverURL: string;
  lang?: string;
  dark?: string;
  emoji?: string[];
  meta?: string[];
  requiredMeta?: string[];
  reaction?: boolean;
  pageview?: boolean;
}

const {
  serverURL,
  lang = "en",
  dark = "html[data-theme-type='dark']",
  emoji = ["https://unpkg.com/@waline/emojis@1.1.0/weibo", "https://unpkg.com/@waline/emojis@1.1.0/bilibili"],
  meta = ["nick", "mail", "link"],
  requiredMeta = [],
  reaction = false,
  pageview = false,
} = Astro.props;
---

<div id="waline-container"></div>

<link rel="stylesheet" href="https://unpkg.com/@waline/client@v3/dist/waline.css" />

<script
  type="module"
  define:vars={{
    serverURL,
    lang,
    dark,
    emoji,
    meta,
    requiredMeta,
    reaction,
    pageview,
  }}
>
  import { init } from "https://unpkg.com/@waline/client@v3/dist/waline.js";

  let walineInstance;

  async function mountWaline() {
    if (walineInstance) {
      await walineInstance.destroy();
    }
    walineInstance = init({
      el: "#waline-container",
      serverURL,
      path: location.pathname,
      lang,
      dark,
      emoji,
      meta,
      requiredMeta,
      reaction,
      pageview,
    });
  }

  document.addEventListener("astro:after-swap", () => {
    mountWaline();
  });

  document.addEventListener("DOMContentLoaded", () => {
    mountWaline();
  });
</script>

<style>
  #waline-container {
    margin-top: 2rem;
    margin-bottom: 2rem;
  }
</style>

Step 3: Using the Waline Component

You can now use the Waline component in your Astro pages or layouts. Here’s how to add it to your blog post template:

ASTRO
---
// In your blog post layout file
import Waline from "../../components/comments/Waline.astro";
// Other imports and frontmatter...
---

<!-- Your blog post content -->
<article>
  <slot />
</article>

<!-- Add the comment section -->
<section class="comments">
  <h2>Comments</h2>
  <Waline serverURL="https://your-waline-server.vercel.app" />
</section>

Replace "https://your-waline-server.vercel.app" with your actual Waline server URL.

Troubleshooting

Common Issues

  • Comments not displaying: Make sure your serverURL is correctly set and accessible.
  • CSS issues: Ensure that the Waline stylesheet is properly loaded.
  • Deployment issues: If your server is on Vercel, check the environment variables and deployment logs.

Thanks for reading!

Adding Comment Systems to Frosti

周二 4月 15 2025 Waline
479 字 · 5 分钟
加载中...

Comments