feat(cms): integrate global layout with CMS and document decision
- Move site-config and navigation to CMS-backed SiteConfigProvider - Keep static constants as fallback for dev and degraded modes - Add ADR-0005 recording the global layout CMS strategy Refs ADR-0005
This commit is contained in:
+15
-13
@@ -15,6 +15,8 @@ import { BackToTop } from "@/components/ui/back-to-top";
|
||||
import { ClientLayout } from "@/components/layout/client-layout";
|
||||
import { getPublishedItems } from "@/lib/cms/data-server";
|
||||
import { SiteConfigProvider, type SiteConfig, type NavigationItem, type MegaDropdownGroup } from "@/lib/site-config";
|
||||
import { COMPANY_INFO } from "@/lib/constants/company";
|
||||
import { NAVIGATION_V2, MEGA_DROPDOWN_DATA } from "@/lib/constants/navigation";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
metadataBase: new URL("https://www.novalon.cn"),
|
||||
@@ -90,19 +92,19 @@ export default async function RootLayout({
|
||||
const configData = configItems[0]?.data as Record<string, unknown> | undefined;
|
||||
|
||||
const siteConfig: SiteConfig = {
|
||||
name: (configData?.name as string) || '',
|
||||
shortName: (configData?.shortName as string) || '',
|
||||
displayName: (configData?.displayName as string) || '',
|
||||
slogan: (configData?.slogan as string) || '',
|
||||
description: (configData?.description as string) || '',
|
||||
founded: (configData?.founded as string) || '',
|
||||
location: (configData?.location as string) || '',
|
||||
email: (configData?.email as string) || '',
|
||||
address: (configData?.address as string) || '',
|
||||
icp: (configData?.icp as string) || '',
|
||||
police: (configData?.police as string) || '',
|
||||
mainNav: (navData?.mainNav as NavigationItem[]) || [],
|
||||
megaDropdown: (navData?.megaDropdown as Record<string, MegaDropdownGroup[]>) || {},
|
||||
name: (configData?.name as string) || COMPANY_INFO.name,
|
||||
shortName: (configData?.shortName as string) || COMPANY_INFO.shortName,
|
||||
displayName: (configData?.displayName as string) || COMPANY_INFO.displayName,
|
||||
slogan: (configData?.slogan as string) || COMPANY_INFO.slogan,
|
||||
description: (configData?.description as string) || COMPANY_INFO.description,
|
||||
founded: (configData?.founded as string) || COMPANY_INFO.founded,
|
||||
location: (configData?.location as string) || COMPANY_INFO.location,
|
||||
email: (configData?.email as string) || COMPANY_INFO.email,
|
||||
address: (configData?.address as string) || COMPANY_INFO.address,
|
||||
icp: (configData?.icp as string) || COMPANY_INFO.icp,
|
||||
police: (configData?.police as string) || COMPANY_INFO.police,
|
||||
mainNav: (navData?.mainNav as NavigationItem[]) || NAVIGATION_V2,
|
||||
megaDropdown: (navData?.megaDropdown as Record<string, MegaDropdownGroup[]>) || MEGA_DROPDOWN_DATA,
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user