Firefly 主题在导航栏添加新菜单和页面的完整流程

701 字
4 分钟
Firefly 主题在导航栏添加新菜单和页面的完整流程

📁 需要修改/创建的 4 个文件#

项目根目录/
├── src/
│ ├── config/
│ │ ├── navBarConfig.ts # 1️⃣ 导航栏配置
│ │ └── LinkPresets.ts # 2️⃣ 链接预设(可选)
│ ├── content/
│ │ ├── config.ts # 3️⃣ 内容集合配置
│ │ └── welfare/ # 4️⃣ 内容文件夹
│ │ ├── rural-education.md
│ │ ├── environment.md
│ │ └── animal-rescue.md
│ └── pages/
│ └── welfare/ # 5️⃣ 页面路由文件夹
│ ├── rural-education.astro
│ ├── environment.astro
│ └── animal-rescue.astro

1️⃣ 导航栏配置 (src/config/navBarConfig.ts)#

// 添加公益项目菜单
links.push({
name: "公益项目",
icon: "material-symbols:favorite",
children: [
{
name: "乡村教育支持",
url: "/rural-education/",
icon: "material-symbols:school",
},
{
name: "环境保护计划",
url: "/environment/",
icon: "material-symbols:forest",
},
{
name: "动物救助行动",
url: "/animal-rescue/",
icon: "material-symbols:pets",
},
{
name: "捐赠渠道",
url: "https://hangdn.com",
external: true,
icon: "material-symbols:volunteer-activism",
},
],
});

关键点:#

  • 内部链接:url: “/welfare/xxx/”
  • 外部链接:加上 external: true

2️⃣ 链接预设映射 (src/config/LinkPresets.ts) - 可选#

如果需要像 LinkPreset.Welfare 那样使用,添加:

import I18nKey from "@i18n/i18nKey";
import { i18n } from "@i18n/translation";
import { LinkPreset, type NavBarLink } from "@/types/config";
export const LinkPresets: { [key in LinkPreset]: NavBarLink } = {
[LinkPreset.Home]: {
name: i18n(I18nKey.home),
url: "/",
icon: "material-symbols:home",
},
[LinkPreset.About]: {
name: i18n(I18nKey.about),
url: "/about/",
icon: "material-symbols:person",
},
[LinkPreset.Archive]: {
name: i18n(I18nKey.archive),
url: "/archive/",
icon: "material-symbols:archive",
},
[LinkPreset.Friends]: {
name: i18n(I18nKey.friends),
url: "/friends/",
icon: "material-symbols:group",
},
[LinkPreset.Sponsor]: {
name: i18n(I18nKey.sponsor),
url: "/sponsor/",
icon: "material-symbols:favorite",
},
[LinkPreset.Guestbook]: {
name: i18n(I18nKey.guestbook),
url: "/guestbook/",
icon: "material-symbols:chat",
},
[LinkPreset.Bangumi]: {
name: i18n(I18nKey.bangumi),
url: "/bangumi/",
icon: "material-symbols:movie",
},
[LinkPreset.Gallery]: {
name: i18n(I18nKey.gallery),
url: "/gallery/",
icon: "material-symbols:photo-library",
},
// ✅ 添加 Welfare 映射
[LinkPreset.Welfare]: {
name: "公益项目", // 或者使用 i18n: i18n(I18nKey.welfare)
url: "/welfare/",
icon: "material-symbols:favorite",
},
};

3️⃣ 内容集合配置 (src/content/config.ts)#

// 添加 welfare 集合
const welfareCollection = defineCollection({
loader: glob({ pattern: "**/*.{md,mdx}", base: "./src/content/welfare" }),
schema: z.object({
title: z.string(),
description: z.string().optional(),
published: z.date().optional(),
tags: z.array(z.string()).optional(),
}),
});
export const collections = {
posts: postsCollection,
spec: specCollection,
welfare: welfareCollection, // ← 必须注册
};

4️⃣ 内容文件 (src/content/welfare/xxx.md)#

---
title: "乡村教育支持"
description: "为偏远山区儿童提供教育资源"
published: 2025-06-01
tags: ["公益", "教育"]
---
# 乡村教育支持
这里是文章内容...

5️⃣ 页面路由文件 (src/pages/welfare/xxx.astro)#

---
import { getEntry, render } from "astro:content";
import Markdown from "@components/common/Markdown.astro";
import MainGridLayout from "@/layouts/MainGridLayout.astro";
const post = await getEntry("welfare", "rural-education"); // 修改 slug
if (!post) {
throw new Error("Page not found");
}
const { Content } = await render(post);
---
<MainGridLayout title={post.data.title} description={post.data.description}>
<div class="flex w-full rounded-(--radius-large) overflow-hidden relative min-h-32">
<div class="card-base z-10 px-9 py-6 relative w-full">
<Markdown class="mt-2">
<Content />
</Markdown>
</div>
</div>
</MainGridLayout>

关键点:#

  • getEntry(“集合名”, “slug”)
  • 集合名必须与 src/content.config.ts 中注册的一致
  • slug 对应 .md 文件名(不含扩展名)

🎯 核心要点#

文件类型位置作用
.astro 路由src/pages/布局、获取内容、渲染页面
.md 内容src/content/welfare/实际的文章/页面内容
content.config.tssrc/content/注册内容集合,定义数据结构
navBarConfig.tssrc/config/配置导航栏菜单项

🔄 完整工作流程#

  • 1.在 navBarConfig.ts 中添加菜单项(URL 路径)
  • 2.在 content/config.ts 中注册集合(如 welfare)
  • 3.创建 .md 文件 在 src/content/集合名/ 下
  • 4.创建 .astro 文件 在 src/pages/集合名/ 下
  • 5.重启开发服务器 测试
  • 6.部署 到生产环境

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Firefly 主题在导航栏添加新菜单和页面的完整流程
https://fly.hangdn.com/posts/firefly-主题在导航栏添加新菜单和页面的完整流程/
作者
Hangdn notes
发布于
2026-03-02
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Hangdn notes
Hello, I'm hangdn.
欢迎你,朋友
🌐 网络冲浪技术分享,📈 股票交易文章,⚡ 科学上网,💪励志语录,📜 史氏宗谱文章,🏞️ 各地风景,没有固定的更新频率,但有我真诚的分享,欢迎你常来坐坐,留言交流。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
58
分类
12
标签
36
总字数
204,769
运行时长
0
最后活动
0 天前

文章目录