・公開フラグ参照漏れの修正

・news詳細リンク生成不具合対応
This commit is contained in:
system_master 2025-11-01 15:34:28 +09:00
parent ce233b2a26
commit 72ff38c274
3 changed files with 49 additions and 14 deletions

View File

@ -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 }> }) {

View File

@ -47,18 +47,27 @@ export default async function Home() {
</div>
);
// 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 (
<Link
key={item.id}
href={item.linkurl}
href={href}
target={item.link_target || "_self"}
className="block hover:bg-gray-50 rounded-md p-1"
>
{content}
</Link>
) : (
<div key={item.id}>{content}</div>
);
})}
</div>

View File

@ -5,19 +5,45 @@ import { NewsItem } from "@/types/news";
* 5
*/
export async function getLatestNews(): Promise<NewsItem[]> {
return await directusFetch<NewsItem[]>(
`/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<NewsItem[]>(`/items/news?${query}`);
}
/**
*
*/
export async function getAllNews(): Promise<NewsItem[]> {
return await directusFetch<NewsItem[]>(
`/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<NewsItem[]>(`/items/news?${query}`);
}
/**
* ID指定で詳細取得