添加友情链接功能

This commit is contained in:
2026-01-17 20:12:21 +08:00
parent 374d34b44a
commit a10e163aa3
8 changed files with 56 additions and 1 deletions

BIN
public/sotr.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

View File

@@ -17,5 +17,7 @@ const currentYear = new Date().getFullYear();
Powered by
<a class="transition link text-[var(--primary)] font-medium" target="_blank" href="https://astro.build">Astro</a> &
<a class="transition link text-[var(--primary)] font-medium" target="_blank" href="https://github.com/saicaca/fuwari">Fuwari</a>
<span> / </span>
<a class="transition link text-[var(--primary)] font-medium" target="_blank" href="https://kira.moe">Sotr's Blog</a>
</div>
</div>

View File

@@ -0,0 +1,27 @@
---
import { Image } from "astro:assets";
import I18nKey from "../../i18n/i18nKey";
import { i18n } from "../../i18n/translation";
import WidgetLayout from "./WidgetLayout.astro";
import ButtonTag from "@components/control/ButtonTag.astro";
import type { SiteConfig } from "../../types/config";
import { siteConfig } from "@/config";
const COLLAPSED_HEIGHT = "7.5rem";
const className = Astro.props.class;
const style = Astro.props.style;
const FRIENDS = siteConfig.friendsConfig?.items || [];
const FRIENDS_ENABLED = siteConfig.friendsConfig?.enable || false;
---
{FRIENDS_ENABLED && (
<WidgetLayout name={i18n(I18nKey.friendship)} id="friends" collapsedHeight={COLLAPSED_HEIGHT} class={className} style={style}>
<div class="flex gap-2 flex-wrap">
{FRIENDS.map((friend) => (
<ButtonTag href={friend.url} label={friend.name}>
<Image src={friend.imgSrc || "/default-friend-icon.png"} alt={friend.imgAlt || ""} width={20} height={20} class="rounded-full mr-2" />{friend.name}
</ButtonTag>
))}
</div>
</WidgetLayout>
)}

View File

@@ -3,6 +3,8 @@ import type { MarkdownHeading } from "astro";
import Categories from "./Categories.astro";
import Profile from "./Profile.astro";
import Tag from "./Tags.astro";
import FriendShip from "./FriendShip.astro";
interface Props {
class?: string;
@@ -18,5 +20,6 @@ const className = Astro.props.class;
<div id="sidebar-sticky" class="transition-all duration-700 flex flex-col w-full gap-4 top-4 sticky top-4">
<Categories class="onload-animation" style="animation-delay: 150ms"></Categories>
<Tag class="onload-animation" style="animation-delay: 200ms"></Tag>
<FriendShip class="onload-animation" style="animation-delay: 250ms"></FriendShip>
</div>
</div>

View File

@@ -29,6 +29,15 @@ export const siteConfig: SiteConfig = {
enable: true, // Display the table of contents on the right side of the post
depth: 3, // Maximum heading depth to show in the table, from 1 to 3
},
friendsConfig: {
enable: true,
items: [{
name: "Sotr's Blog",
url: "https://kira.moe",
imgSrc: "/sotr.jpg",
imgAlt: "Sotr's Blog",
},],
},
favicon: [
// Leave this array empty to use the default favicon
// {

View File

@@ -5,6 +5,7 @@ enum I18nKey {
search = "search",
download = "download",
friendship = "friendship",
tags = "tags",
categories = "categories",
recentPosts = "recentPosts",

View File

@@ -8,6 +8,7 @@ export const zh_CN: Translation = {
[Key.search]: "搜索",
[Key.download]: "下载",
[Key.friendship]: "友情链接",
[Key.tags]: "标签",
[Key.categories]: "分类",
[Key.recentPosts]: "最新文章",

View File

@@ -34,7 +34,7 @@ export type SiteConfig = {
enable: boolean;
depth: 1 | 2 | 3;
};
friendsConfig?: FriendsConfig;
favicon: Favicon[];
};
@@ -44,6 +44,18 @@ export type Favicon = {
sizes?: string;
};
export type FriendItem = {
name: string;
url: string;
imgSrc?: string;
imgAlt?: string;
};
export type FriendsConfig = {
enable: boolean;
items: FriendItem[];
};
export enum LinkPreset {
Home = 0,
Archive = 1,