Add tags to guide/
parent
f16e340fd2
commit
13b0c03e5f
@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
const { id, title, tags, description } = Astro.props
|
||||||
|
---
|
||||||
|
|
||||||
|
<div class="article">
|
||||||
|
<div class="title">
|
||||||
|
<a href={`/guide/${id}`}>{title}</a>
|
||||||
|
</div>
|
||||||
|
<div class="description">{description}</div>
|
||||||
|
<div class="tags">
|
||||||
|
{tags.map(tag => <a href={`/guide/tags/${tag}`}>#{tag}</a>)}
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
import { getCollection } from 'astro:content'
|
||||||
|
|
||||||
|
import PageLayout from '@layouts/PageLayout.astro'
|
||||||
|
import ArticleCard from '@components/ArticleCard.astro'
|
||||||
|
|
||||||
|
const blogposts = await getCollection('guides')
|
||||||
|
---
|
||||||
|
|
||||||
|
<PageLayout pageName="guide">
|
||||||
|
<div class="article-list">
|
||||||
|
{
|
||||||
|
blogposts.map(post => (
|
||||||
|
<ArticleCard
|
||||||
|
title={post.data.title}
|
||||||
|
id={post.data.id}
|
||||||
|
description={post.data.description}
|
||||||
|
tags={post.data.tags}
|
||||||
|
/>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</PageLayout>
|
@ -0,0 +1,55 @@
|
|||||||
|
---
|
||||||
|
import { getCollection } from 'astro:content'
|
||||||
|
import type { CollectionEntry } from 'astro:content'
|
||||||
|
import PageLayout from '@/layouts/PageLayout.astro'
|
||||||
|
|
||||||
|
export async function getStaticPaths() {
|
||||||
|
const guides = await getCollection('guides')
|
||||||
|
|
||||||
|
const tags: string[] = []
|
||||||
|
|
||||||
|
guides.forEach(post => {
|
||||||
|
post.data.tags.forEach(tag => {
|
||||||
|
tags.push(tag)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
return Array.from(new Set(tags)).map(tag => {
|
||||||
|
return {
|
||||||
|
params: { tag },
|
||||||
|
props: {
|
||||||
|
tag,
|
||||||
|
blogposts: guides.filter(post => post.data.tags.includes(tag)),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
tag: string
|
||||||
|
blogposts: CollectionEntry<'guides'>[]
|
||||||
|
}
|
||||||
|
|
||||||
|
const { tag, blogposts } = Astro.props
|
||||||
|
---
|
||||||
|
|
||||||
|
<PageLayout pageName="tag">
|
||||||
|
<h1>#{tag}</h1>
|
||||||
|
<div class="article-list">
|
||||||
|
{
|
||||||
|
blogposts.map(post => (
|
||||||
|
<div class="article">
|
||||||
|
<div class="title">
|
||||||
|
<a href={`/guide/${post.data.id}`}>{post.data.title}</a>
|
||||||
|
</div>
|
||||||
|
<div class="description">{post.data.description}</div>
|
||||||
|
<div class="tags">
|
||||||
|
{post.data.tags.map(tag => (
|
||||||
|
<a href={`/guide/tags/${tag}`}>#{tag}</a>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</PageLayout>
|
Loading…
Reference in New Issue