From 72ff38c274d658b8a871bf782d3b15efd7ef0287 Mon Sep 17 00:00:00 2001 From: system_master Date: Sat, 1 Nov 2025 15:34:28 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=BB=E5=85=AC=E9=96=8B=E3=83=95=E3=83=A9?= =?UTF-8?q?=E3=82=B0=E5=8F=82=E7=85=A7=E6=BC=8F=E3=82=8C=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=20=E3=83=BBnews=E8=A9=B3=E7=B4=B0=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E7=94=9F=E6=88=90=E4=B8=8D=E5=85=B7=E5=90=88=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/news/[id]/page.tsx | 2 +- src/app/page.tsx | 19 ++++++++++++----- src/lib/directus/news.ts | 42 ++++++++++++++++++++++++++++++-------- 3 files changed, 49 insertions(+), 14 deletions(-) diff --git a/src/app/news/[id]/page.tsx b/src/app/news/[id]/page.tsx index 461d35b..b2818ee 100644 --- a/src/app/news/[id]/page.tsx +++ b/src/app/news/[id]/page.tsx @@ -2,7 +2,7 @@ import { notFound } from "next/navigation"; import { getNewsById } from "@/lib/directus/news"; import type { NewsItem } from "@/types/news"; import NewsDetail from "@/components/news/NewsDetail"; - +export const dynamic = "force-dynamic"; export const revalidate = 3600; export default async function NewsDetailPage({ params }: { params: Promise<{ id: string }> }) { diff --git a/src/app/page.tsx b/src/app/page.tsx index 20e2530..e97cdbb 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -47,18 +47,27 @@ export default async function Home() { ); - // linkurl があればクリック可能に - return item.linkurl ? ( + // --- 事前にURL文字列を確定 --- + const url = item.linkurl?.trim() ?? ""; + const hasValidLink = url !== "" && url.toLowerCase() !== "none"; + + const href: string = hasValidLink + ? /^https?:\/\//.test(url) + ? url // 外部URL + : url.startsWith("/") + ? url // 内部スラッグ (/page 等) + : `/news/${url}` // 相対指定は /news/配下として扱う + : `/news/${item.id}`; // 「リンクなし」時は詳細へ + + return ( {content} - ) : ( -
{content}
); })} diff --git a/src/lib/directus/news.ts b/src/lib/directus/news.ts index 7d13605..a80937a 100644 --- a/src/lib/directus/news.ts +++ b/src/lib/directus/news.ts @@ -5,19 +5,45 @@ import { NewsItem } from "@/types/news"; * 最新ニュース5件取得 */ export async function getLatestNews(): Promise { - return await directusFetch( - `/items/news?sort[]=-published_at&limit=5&fields[]=id&fields[]=title&fields[]=slug&fields[]=published_at&fields[]=thumbnail.id&fields[]=thumbnail.filename_disk&fields[]=linkurl&fields[]=link_target&fields[]=tags` - ); -} + const query = [ + "filter[status][_eq]=1", // ✅ 公開=1 のみ取得 + "sort[]=-published_at", + "limit=5", + "fields[]=id", + "fields[]=title", + "fields[]=slug", + "fields[]=published_at", + "fields[]=thumbnail.id", + "fields[]=thumbnail.filename_disk", + "fields[]=linkurl", + "fields[]=link_target", + "fields[]=tags", + ].join("&"); + + return await directusFetch(`/items/news?${query}`); + } /** * 全ニュース一覧取得 */ export async function getAllNews(): Promise { - return await directusFetch( - `/items/news?sort[]=-published_at&fields[]=id&fields[]=title&fields[]=slug&fields[]=published_at&fields[]=thumbnail.id&fields[]=thumbnail.filename_disk&fields[]=linkurl&fields[]=link_target&fields[]=tags&fields[]=content` - ); -} + const query = [ + "filter[status][_eq]=1", // ✅ 公開=1 のみ取得 + "sort[]=-published_at", + "fields[]=id", + "fields[]=title", + "fields[]=slug", + "fields[]=published_at", + "fields[]=thumbnail.id", + "fields[]=thumbnail.filename_disk", + "fields[]=linkurl", + "fields[]=link_target", + "fields[]=tags", + "fields[]=content", + ].join("&"); + + return await directusFetch(`/items/news?${query}`); + } /** * ニュースID指定で詳細取得