diff --git a/app/[...slug]/page.jsx b/app/[...slug]/page.jsx index cd031e9..76b71b8 100644 --- a/app/[...slug]/page.jsx +++ b/app/[...slug]/page.jsx @@ -1,6 +1,6 @@ import Banner from "@/components/banner/Banner"; import Category from "@/components/sidebar/Category"; -import { getSiteSettings } from "@/utils/siteSettings"; +import { getSiteSettings } from "@/utils/data"; import { notFound } from 'next/navigation'; import DynamicListPage from "@/components/common/DynamicListPage"; import { Suspense } from 'react'; @@ -35,21 +35,43 @@ export async function generateMetadata({ params }) { slug_list: slugArr, downloadFiles: false // Do not download files for metadata }); + const siteSettings = await getSiteSettings(); + const siteTitle = siteSettings.site_title || ''; + const siteName = siteSettings.site_name || ''; + const siteNameInPageTitles = siteSettings.site_name_in_page_titles || 'None'; + let title = ''; if (error) { + title = error.title || 'Page Error'; return { - title: error.title || 'Page Error', + title, description: error.message || '', }; } if (Array.isArray(data) && page_info) { + title = page_info.meta_title || page_info.title || ''; + if (siteName && title) { + if (siteNameInPageTitles === 'After') { + title = `${title} - ${siteName}`; + } else if (siteNameInPageTitles === 'Before') { + title = `${siteName} - ${title}`; + } + } return { - title: page_info.meta_title || page_info.title || '', + title, description: page_info.meta_description || '', }; } + title = data?.meta_title || data?.title || ''; + if (siteName && title) { + if (siteNameInPageTitles === 'After') { + title = `${title} - ${siteName}`; + } else if (siteNameInPageTitles === 'Before') { + title = `${siteName} - ${title}`; + } + } return { - title: data?.meta_title || data?.title || '', + title, description: data?.meta_description || '', }; } @@ -57,8 +79,7 @@ export async function generateMetadata({ params }) { export default async function DynamicPage({ params, searchParams }) { const resolvedParams = await params; const slugArr = resolvedParams.slug; - - const siteSettings = await getSiteSettings(process.env.SITE_URL); + const siteSettings = await getSiteSettings(); const pageSize = Number(siteSettings.page_size) || 12; // 始终获取第一页的数据用于静态生成 diff --git a/app/page.jsx b/app/page.jsx index f4df10b..7eeb508 100644 --- a/app/page.jsx +++ b/app/page.jsx @@ -1,16 +1,14 @@ import Hero from "@/components/homes/home-15/Hero"; import SwiperItems from "@/components/homes/home-15/SwiperItems"; -import CategoryItems from "@/components/homes/home-15/CategoryItems"; import React from "react"; -import { getSiteSettings } from "@/utils/siteSettings"; +import { getSiteSettings } from "@/utils/data"; // Using a static value to comply with Next.js 15 build requirements. // On-demand revalidation will be handled via the API route. export const revalidate = 3600; export async function generateMetadata() { - const siteUrl = process.env.SITE_URL; - const data = await getSiteSettings(siteUrl); + const data = await getSiteSettings(); const siteTitle = data.site_title || ""; const siteDescription = data.site_description || ""; const siteName = data.site_name || ""; diff --git a/app/products/[...slug]/page.jsx b/app/products/[...slug]/page.jsx index 462a858..5b20b79 100644 --- a/app/products/[...slug]/page.jsx +++ b/app/products/[...slug]/page.jsx @@ -1,6 +1,6 @@ import Banner from "@/components/banner/Banner"; import Category from "@/components/sidebar/Category"; -import { getSiteSettings } from "@/utils/siteSettings"; +import { getSiteSettings } from "@/utils/data"; import { notFound } from 'next/navigation'; import DynamicListPage from "@/components/common/DynamicListPage"; import { Suspense } from 'react'; @@ -21,21 +21,43 @@ export async function generateMetadata({ params }) { const slug = resolvedParams.slug || []; const slugArr = [baseSlug, ...(Array.isArray(slug) ? slug : [slug])]; const { data, error, page_info } = await getPageData({ slug_list: slugArr }); + const siteSettings = await getSiteSettings(); + const siteTitle = siteSettings.site_title || ''; + const siteName = siteSettings.site_name || ''; + const siteNameInPageTitles = siteSettings.site_name_in_page_titles || 'None'; + let title = ''; if (error) { + title = error.title || 'Page Error'; return { - title: error.title || 'Page Error', + title, description: error.message || '', }; } if (Array.isArray(data) && page_info) { + title = page_info.meta_title || page_info.title || ''; + if (siteName && title) { + if (siteNameInPageTitles === 'After') { + title = `${title} - ${siteName}`; + } else if (siteNameInPageTitles === 'Before') { + title = `${siteName} - ${title}`; + } + } return { - title: page_info.meta_title || page_info.title || '', + title, description: page_info.meta_description || '', }; } + title = data?.meta_title || data?.title || ''; + if (siteName && title) { + if (siteNameInPageTitles === 'After') { + title = `${title} - ${siteName}`; + } else if (siteNameInPageTitles === 'Before') { + title = `${siteName} - ${title}`; + } + } return { - title: data?.meta_title || data?.title || '', + title, description: data?.meta_description || '', }; } @@ -45,7 +67,7 @@ export default async function Page({ params, searchParams }) { const slug = resolvedParams.slug || []; const slugArr = [baseSlug, ...(Array.isArray(slug) ? slug : [slug])]; - const siteSettings = await getSiteSettings(process.env.SITE_URL); + const siteSettings = await getSiteSettings(); const pageSize = Number(siteSettings.page_size) || 12; const { data, error, total } = await getPageData({ diff --git a/components/footers/Footer.jsx b/components/footers/Footer.jsx index c6a8ea9..94814ef 100644 --- a/components/footers/Footer.jsx +++ b/components/footers/Footer.jsx @@ -1,17 +1,11 @@ -'use client'; -import React, { useEffect, useState } from "react"; +import React from "react"; import SocialLinks from "@/components/contact/SocialLinks"; -import { getSiteSettings } from "@/utils/siteSettings"; +import { getSiteSettings } from "@/utils/data"; import MenuList from "./MenuList"; -import Contact from "@/components/contact/Contact"; import Image from "next/image"; -export default function Footer15() { - const [siteSettings, setSiteSettings] = useState({}); - - useEffect(() => { - getSiteSettings().then(setSiteSettings); - }, []); +export default async function Footer() { + const siteSettings = await getSiteSettings(); return (