544 字
3 分钟
[Fuwari]给博客添加主页
2025-05-18
2025-05-18

引子#

之前一直想要将博客的根目录改为主页,最近研究了一下,下面是简单的实现方法:

NOTE

请在操作前做好原项目备份

操作步骤#

1.更改页面路径#

src/pages/[...page].astro移至新建目录src/pages/blog/[...page].astro
并新建文件src/pages/index.astro

index.astro
---
import ContentCard from '../components/ContentCard.astro'
import MainGridLayout from '../layouts/MainGridLayout.astro'
---
<MainGridLayout>
<ContentCard
class="onload-animation"
style="animation-delay: var(--content-delay)"
/>
</MainGridLayout>

2.配置主页内容#

新建文件src/components/ContentCard.astro

ContentCard.astro
---
interface Props {
class?: string
style?: string
}
const { class: className, style } = Astro.props
---
//将主页内容至于此处,以下是示例:
<div class="card-base p-6 mb-4">
<div class="card-base p-1 mb-0.1">
<script is:inline></script>
<div class="flex items-center gap-2"> </div>
<h1 class="text-2xl font-bold text-black/90 dark:text-white/90">Welcome to my blog,👋</h1>
</div>
IMPORTANT

在此处引用src/assets里的图片需要在文件头加上:

ContentCard.astro
---
import { Image } from 'astro:assets'
import ExampletImage from '../assets/images/example.png'
interface Props {
class?: string
style?: string
}
// ...existing code...
// 使用方式如下:
<Image src={BackImage} alt="示例图片" class="rounded-xl w-full mb-4"/>
// ...existing code...

3.修改依赖文件路径#

由于src/pages/[...page].astro被移至/blog目录,因此在import时需要再返回一级目录

src/pages/[...page].astro
---
import type { GetStaticPaths } from 'astro'
import ContentCard from '../components/ContentCard.astro'
import PostPage from '../components/PostPage.astro'
import Pagination from '../components/control/Pagination.astro'
import { PAGE_SIZE } from '../constants/constants'
import MainGridLayout from '../layouts/MainGridLayout.astro'
import { getSortedPosts } from '../utils/content-utils'
import ContentCard from '../../components/ContentCard.astro'
import PostPage from '../../components/PostPage.astro'
import Pagination from '../../components/control/Pagination.astro'
import { PAGE_SIZE } from '../../constants/constants'
import MainGridLayout from '../../layouts/MainGridLayout.astro'
import { getSortedPosts } from '../../utils/content-utils'
---
export const getStaticPaths = (async ({ paginate }) => {
const allBlogPosts = await getSortedPosts()
// ...existing code...

4.在导航栏增加博客选项#

在导航栏的主页后添加博客,并配置路径和i18n

src/config.ts
export const navBarConfig: NavBarConfig = {
links: [
LinkPreset.Home,
LinkPreset.Blog,
LinkPreset.Archive,
LinkPreset.Series,
LinkPreset.About,
LinkPreset.Friends,
// ...existing code...

src/types/config.ts
export enum LinkPreset {
Home = 0,
Blog = 1,
Archive = 2,
Series = 3,
About = 4,
Friends = 5,
}
// ...existing code...

src/constants/link-presets.ts
[LinkPreset.Friends]: {
name: i18n(I18nKey.friends),
url: '/friends/',
},
[LinkPreset.Series]: {
name: i18n(I18nKey.series),
url: '/series/',
},
[LinkPreset.Blog]: {
name: i18n(I18nKey.blog),
url: '/blog/',
},
}

src/i18n/i18nKey.ts
author = 'author',
publishedAt = 'publishedAt',
license = 'license',
friends = 'friends',
series = 'series',
blog = 'blog',
}
// ...existing code...

src/i18n/languages/zh_CN.ts
[Key.author]: '作者',
[Key.publishedAt]: '发布于',
[Key.license]: '许可协议',
[Key.friends]: '友链',
[Key.series]: '系列',
[Key.blog]: '博客',
}

5.修改控件指向路径#

src/components/control/Pagination.astro
const getPageUrl = (p: number) => {
if (p == 1) return '/'
return `/${p}/`
if (p == 1) return '/blog/'
return `/blog/${p}/`
}
---
// ...existing code...


结语#

至此,访问博客根域名时就能直接看到主页啦ヾ(≧ ▽ ≦)ゝ,文章列表则位于/blog/<页数>🎉

[Fuwari]给博客添加主页
https://elvish.me/posts/fuwari-homepage/
作者
Elvish
发布于
2025-05-18
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时