Clarity主题深度定制指南

针对Clarity主题的功能缺失,手把手教你如何添加PageBanner、本地说说、标签页、友链朋友圈和关于等页面与功能。包含完整的Vue组件代码与CSS样式。

开篇

本教程还没有完善好,正在持续撰写中。

复用组件

添加ProseImg组件

在/app/components/content/下新建文件ProseImg.vue

添加PageBanner

注意:下面教程中复用PageBanner组件的地方比较多,如果您对PageBanner需求不大,可直接修改文件把PageBanner的样式写入pages页面文件中,您不需要PageBanner可以手动移除。

在/app/components/partial/下新建文件PageBanner.vue

音乐播放器

在/app/components/content/新建MusicPlayer.vue

在/app/components/partial/新建ProgressBar.vue

在/app/composables/新建useMusicParser.ts

在/app/types/新建music.ts

ts
/**
 * 音乐播放器类型定义
 */

export interface MusicExtension {
	id: string
	title: string
	artist: string
	cover?: string
	url?: string
	source: 'netease' | 'tencent' | 'kuwo' | 'xiami' | 'kugou' | 'youtube' | 'url'
	platform?: string
}

修改blog.config.ts

ts
/** 订阅源是否启用XSLT样式 */
		enableStyle: true,
	},
     
    /** Meting API 配置 */
	meting: {
		/** Meting API 服务地址,用于解析音乐链接 */
		apiServer: 'https://api.qijieya.cn/meting/',
		/** 是否启用音乐解析 */
		enabled: true,
	},

音乐播放器使用语法

vue
::MusicPlayer
---
music:
  id: "xxxxxxxx"
  source: "netease"
---
::

页面相关

添加本地essay页面

在/app/pages/新建essay.vue

在/app/types/新建talk.ts

ts
export type TalkItem = {  
  text?: string
  date: string
  images?: string[]
  video?: {
    type?: 'raw' | 'bilibili' | 'bilibili-nano' | 'youtube' | 'douyin' | 'douyin-wide' | 'tiktok'
    id: string
    ratio?: string | number
    poster?: string
  }
  tags?: string[]
  location?: string
}

在/app/新建talks.ts

这个文件是更新说说内容的地方

添加tags页面

在/app/pages/新建tags.vue

友链朋友圈

适配六神的 轻量友链朋友圈。

在/scripts/新建generate-friend.ts

执行

bash
pnpm tsx scripts/generate-friend.ts

会在public目录生成friend.json

在/app/pages/新建fcircle.vue

添加about页面

在/app/pages/新建about.vue

添加恋爱记录页面

在/app/pages/新建love.vue

添加留言板页面

在/app/pages/新建comments.vue

archive页面年龄显示开关

修改/app/pages/archive.vue的第75行

vue
- <div v-if="birthYear" class="archive-age"> 
//修改成仅当birthYear为数字时才显示
+ <div v-if="typeof birthYear === 'number'" class="archive-age">

侧边栏

如何添加自定义侧边栏

修改/app/composables/useWidgets.ts,以恋爱墙为例。

ts
import {
    LazyWidgetBlogLog,
    LazyWidgetBlogStats,
    LazyWidgetBlogTech,
    LazyWidgetCommGroup,
    LazyWidgetEmpty,
    LazyWidgetGithubCard,
    LazyWidgetToc,
    LazyWidgetLoveWall, // 恋爱墙
} from '#components'
import { pascal } from 'radash'

// @keep-sorted
const rawWidgets = {
    LazyWidgetBlogLog,
    LazyWidgetBlogStats,
    LazyWidgetBlogTech,
    LazyWidgetCommGroup,
    LazyWidgetEmpty,
    LazyWidgetGithubCard,
    LazyWidgetToc,
    LazyWidgetLoveWall, // 恋爱墙
}

在你需要添加的page页面修改对应的vue,/app/pages/index.vue是文章首页

vue
// 修改下列参数,'WidgetBlogStats'在上方就是上方'WidgetLoveWall'则是最底下,可自行调整侧边栏顺序
<template #aside>
    <WidgetBlogStats />
    <WidgetBlogTech />
    <WidgetBlogLog />
    <WidgetCommGroup />
    <WidgetLoveWall /> // 恋爱墙
</template>

恋爱墙

在/app/components/widget/新建LoveWall.vue

添加地址显示

在/app/components/widget/新建WelcomeVisitor.vue

最新评论

在/app/components/widget/新建LatestComments.vue

修改TOC

文章footer

添加分享功能

修改/app/components/post/PostFooter.vue

添加打赏功能

在/app/components/post/新建Donation.vue

修改/app/pages/[...slug].vue

vue
<PostFooter v-bind="post" />
<PostDonation /> //添加项
<PostSurround />
<PostComment />

修改blog.config.ts

ts
    /** 禁止搜索引擎收录的路径 */
	robotsNotIndex: ['/preview', '/previews/*'],
},

/** 赞赏配置 */
donation: {
    enable: true,
    message: '感谢您的支持,这将激励我创作更多优质内容!',
    items: {
      "微信支付": 'https://example.com/wechat-pay.png',
      "支付宝": 'https://example.com/alipay.png',
      "xxx": 'https://example.com/xxx.png'
    }
},

/** 博客 Atom 订阅源 */

指定页面关闭评论、赞赏、分享、功能

按照如下代码修改/app/pages/[...slug].vue

vue
   <PostFooter v-if="post.postfooter" v-bind="post" />
	<PostDonation v-if="post.donation" />
	<PostSurround />
	<PostComment v-if="post.comment" />

在content.config.ts中添加如下代码

vue
const articleSchema = z.object({
	draft: z.boolean().default(false),
	permalink: z.string().optional(),
+	postfooter: z.boolean().default(true),
+	donation: z.boolean().default(true),
+	comment: z.boolean().default(true),

使用示例

md
---
title: '文章标题'
date: '2025-01-01'
postfooter: false
donation: false
comment: false
---

摘要样式修改

修改/app/components/post/Excerpt.vue。

添加二级菜单

修改/app/components/blog/BlogSidebar.vue。

app.config.ts二级菜单使用格式

ts
{
					icon: 'tabler:book',
					text: '资料',
					url: '#',
					children: [
						{ icon: 'tabler:device-gamepad-2', text: '游戏', url: '/games' },
						{ icon: 'tabler:cloud', text: '云盘', url: '/drive' },
					],
				},

Twikoo评论样式美化

修改/app/components/post/Comment.vue。

微信支付
支付宝

感谢您的支持,这将激励我创作更多优质内容!

身份的枷锁与友谊的边界
把博客从Hexo搬到Nuxt的全过程

评论区

评论加载中...