Konu: Laravel ile geliştirdiğimiz çoklu tema yapısına sahip projeyi NEXTJS nasıl çevirebiliriz.
Merhabalar, hazır haber sitesi oluşturmasını sağlayan bir şirkette çalışıyorum. Biz projeyi multi-tenant şekilde geliştirdik.
Projenin ön yüzünü geliştirirken de Laravel çoklu tema yapısını kullandık.
Ancak daha hızlı bir deneyim için NEXTJS geçmemiz isteniyor.
Site kısmını NEXTJS nasıl geçirebilirim. Tavsiye edebileceğiniz bir yöntem var mı?
MULTI-TENANT Yönetim Paneli:
{sitedomain}.myexample.com/panel
haber1,haber2(.com) -> yapısında laravel çoklu tema yapısı ile geliştirdik. (resources>views/themes/theme1,vb.)
Araştırırken genel kullan şekli şu şekilde karşıma çıktı:
// middleware.js
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(req: NextRequest) {
const host = req.headers.get('host') || '';
const domain = host.replace(/^www\./, '');
const res = NextResponse.next();
res.headers.set('x-active-theme', api'den gelen tema folder);
return res;
}
lib/theme.js
import { headers } from 'next/headers';
import { notFound } from 'next/navigation';
function getActiveTheme() {
const headersList = headers();
return headersList.get('x-active-theme') || 'theme1';
}
export async function loadThemeComponent(componentPath) {
const theme = getActiveTheme();
try {
const { default: Component } = await import(`@/themes/${theme}/${componentPath}`);
return Component;
} catch (error) {
}
}
app/layout.jsx
import { loadThemeComponent } from '@/lib/theme';
export default async function RootLayout({ children }) {
const ThemeLayout = await loadThemeComponent('layouts/RootLayout.jsx');
return <ThemeLayout>{children}</ThemeLayout>;
}
app/blog/page.jsx
import { loadThemeComponent } from '@/lib/theme';
export default async function Home() {
const BlogPage = await loadThemeComponent('pages/blog.jsx');
return <BlogPage />
}