Skip to content

Commit 61f31c0

Browse files
committed
draft
1 parent a90096c commit 61f31c0

File tree

8 files changed

+65
-0
lines changed

8 files changed

+65
-0
lines changed
25.7 KB
Loading
10.9 KB
Loading
72.5 KB
Loading
176 KB
Loading
7.01 KB
Loading
172 KB
Loading

2025/src/components/Sponsors/index.astro

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
---
2+
import { getCollection } from "astro:content";
23
import Card from "../Card.astro";
34
import Heading from "../Heading.astro";
45
import {
@@ -9,8 +10,47 @@ import {
910
FileText,
1011
MessageCircle,
1112
} from "@lucide/astro";
13+
14+
const sponsorsData = await getCollection('sponsors');
15+
16+
const sponsors = sponsorsData[0].data.sponsor;
17+
18+
const sponsorsByRank = sponsors.reduce((acc, sponsor) => {
19+
if (!acc[sponsor.rank]) {
20+
acc[sponsor.rank] = [];
21+
}
22+
acc[sponsor.rank].push(sponsor);
23+
return acc;
24+
}, {} as Record<string, typeof sponsors>);
25+
26+
const rankOrder = ['platinum', 'gold', 'silver', 'bronze'];
1227
---
1328

29+
{rankOrder.map(rank => (
30+
sponsorsByRank[rank] && (
31+
<div class="sponsor-rank-section">
32+
<h3 class="rank-title">{rank}</h3>
33+
<div class="sponsors-grid">
34+
{sponsorsByRank[rank].map(sponsor => (
35+
<a
36+
href={sponsor.url}
37+
class={`sponsor-card sponsor-${rank}`}
38+
target="_blank"
39+
rel="noopener noreferrer"
40+
>
41+
<img
42+
src={`/images/sponsors/${sponsor.image}`}
43+
alt={sponsor.name}
44+
class="sponsor-logo"
45+
/>
46+
<p class="sponsor-name">{sponsor.name}</p>
47+
</a>
48+
))}
49+
</div>
50+
</div>
51+
)
52+
))}
53+
1454
<section id="sponsors" class="bg-emerald-50 py-10 md:py-16">
1555
<div class="container mx-auto px-4">
1656
<Heading> スポンサー </Heading>

2025/src/content/config.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// src/content/config.ts
2+
import { defineCollection, z } from 'astro:content';
3+
import { glob } from 'astro/loaders';
4+
5+
const sponsors = defineCollection({
6+
loader: glob({
7+
pattern: 'nanashi.hoge.toml',
8+
base: './src/data'
9+
}),
10+
schema: z.object({
11+
sponsor: z.array(
12+
z.object({
13+
rank: z.enum(['gold', 'silver', 'bronze']),
14+
name: z.string(),
15+
url: z.string().url(),
16+
image: z.string()
17+
})
18+
)
19+
})
20+
});
21+
22+
// コレクションのエクスポート
23+
export const collections = {
24+
sponsors
25+
};

0 commit comments

Comments
 (0)