diff options
| author | Fushihara <1039534+fushihara@users.noreply.github.com> | 2024-09-23 15:19:25 +0900 |
|---|---|---|
| committer | Fushihara <1039534+fushihara@users.noreply.github.com> | 2024-09-23 15:19:25 +0900 |
| commit | ba0c8d73e585d7ff249dd90684254bc7fa025544 (patch) | |
| tree | 3b35be04e7bf11eb046246696d45fb8854f01f14 /src/app/article/tag | |
| parent | 41eff0687f69539a514cfa3a28a68f89fc8c54fd (diff) | |
commit
Diffstat (limited to 'src/app/article/tag')
| -rw-r--r-- | src/app/article/tag/[tagName]/page.tsx | 40 | ||||
| -rw-r--r-- | src/app/article/tag/page.tsx | 30 | ||||
| -rw-r--r-- | src/app/article/tag/style.css | 3 |
3 files changed, 73 insertions, 0 deletions
diff --git a/src/app/article/tag/[tagName]/page.tsx b/src/app/article/tag/[tagName]/page.tsx new file mode 100644 index 0000000..3df1f1e --- /dev/null +++ b/src/app/article/tag/[tagName]/page.tsx @@ -0,0 +1,40 @@ +import { ArticleLoader } from "../../../../util/articleLoader"; +import { ArticleListElement } from "../../_components/articleListElement"; +type PageType = { + searchParams: Record<string, string>, + params: { + tagName: string, + } +} +export async function generateMetadata(context: PageType) { + return { + title: `アキバ総研アーカイブ:ページ ${context.params.tagName}`, + } +} +export default async function Page(context: PageType) { + const al = new ArticleLoader() + const nowPageTagName = decodeURIComponent(context.params.tagName); + const loadedData = await al.loadData().then(articles => { + const filterd = articles.filter(article => { + if (article.tags.includes(nowPageTagName)) { + return true; + } else { + return false; + } + }); + return filterd; + }); + return ( + <div className="p-1 gap-16"> + <div className="text-center">タグ:{nowPageTagName} の記事一覧</div> + <div className="text-right">全:{loadedData.length}件</div> + {ArticleListElement(loadedData)} + </div> + ); +} +export async function generateStaticParams() { + const tagList = await new ArticleLoader().getTagList(); + return tagList.map((data, index) => { + return { tagName: data.name }; + }); +} diff --git a/src/app/article/tag/page.tsx b/src/app/article/tag/page.tsx new file mode 100644 index 0000000..211ca94 --- /dev/null +++ b/src/app/article/tag/page.tsx @@ -0,0 +1,30 @@ +import Link from "next/link"; +import { ArticleLoader } from "../../../util/articleLoader"; +import "./style.css"; +type PageType = { + searchParams: Record<string, string>, + params: { + tagName: string, + } +} +export async function generateMetadata(context: PageType) { + return { + title: `アキバ総研アーカイブ:タグ一覧`, + } +} +export default async function Page(context: PageType) { + const tagList = await new ArticleLoader().getTagList(); + const tagsElement: JSX.Element[] = []; + tagList.forEach(t => { + tagsElement.push(<span key={t.name}><Link href={`/article/tag/${t.name}`}>{t.name}({t.count})</Link></span>) + }) + return ( + <div className="p-8 pb-20 gap-16 sm:p-20"> + <h1>著名なタグ一覧</h1> + <h1>記事にセットされているタグの一覧</h1> + <div className="flex gap-2 flex-wrap"> + {tagsElement} + </div> + </div> + ); +} diff --git a/src/app/article/tag/style.css b/src/app/article/tag/style.css new file mode 100644 index 0000000..f8a5c5f --- /dev/null +++ b/src/app/article/tag/style.css @@ -0,0 +1,3 @@ +h1,h2,h3 { + all: revert; +} |
