פרוקסי ללוח הניהול
חיבור לוח הניהול לאתר שלך הוא שלב פשוט
כך מובטחת חוויית עריכה חלקה. כאשר לוח הניהול מחובר לאתר שלך באמצעות פרוקסי, ניתן לערוך את האתר באותה כתובת URL ולראות תצוגה מקדימה חזותית של השינויים בזמן אמת. הדבר מאפשר גם עריכה באמצעות שכבות־על, שמספקת חוויית משתמש טובה יותר בעת עריכת דף האינטרנט.
הפרוקסי הוא קובץ proxy.ts בפרויקט שלך (ב־Next.js 16; בגרסאות ישנות יותר של Next.js זהו middleware.ts). הוא פועל כמו שכתוב URL, ומנתב את נקודות הקצה /admin, /api ו־/auth של האתר שלך אל ה־CMS.
localhost: חובה להשתמש במנהרה (מכיוון שה־CMS אינו יכול לגשת ישירות אל localhost)// proxy.ts (Next.js 16 — use middleware.ts on older Next.js)
import { createCmsProxy, cmsProxyMatcher } from 'cms-renderer/lib/proxy';
import type { NextRequest } from 'next/server';
const cmsProxy = createCmsProxy({
// The CMS admin origin to proxy to.
upstream: process.env.ADMIN_UPSTREAM_ORIGIN ?? 'https://cms.dev.tryprofound.com',
});
export default async function proxy(request: NextRequest) {
return cmsProxy(request);
}
export const config = {
matcher: cmsProxyMatcher,
};
createCmsProxy מחזיר מטפל שאותו יש לקרוא עם הבקשה הנכנסת. cmsProxyMatcher הוא matcher מוכן לשימוש המכסה את /admin, /api, /auth, וכן בקשות /_next ונכסים סטטיים שמקורן באזור הניהול — כך שאין צורך לכתוב ידנית מערך matcher.
בגרסאות ישנות יותר של Next.js, יש לקרוא לקובץ
middleware.tsולייצא את המטפל בשםmiddlewareבמקום ייצוא ברירת המחדל:
export async function middleware(request: NextRequest) { return cmsProxy(request); } export const config = { matcher: cmsProxyMatcher };
צריך לנתב נתיבים נוספים דרך הפרוקסי? העבר
additionalPaths: ['/my-path']אלcreateCmsProxy.
כעת ניתן לעבור אל /admin באתר שלך כדי לגשת ללוח הניהול. פעולה זו מאפשרת תצוגה מקדימה חיה.
שכבות־העל ומצב העריכה מוצגים על ידי נתיב התצוגה המקדימה שלך, ולא על ידי נתיב הייצור הסטטי. לוח הניהול טוען את האתר שלך במצב עריכה (?edit_mode=true), והבקשה הזו מטופלת על ידי ParametricRoutePreviewPage בנתיב force-dynamic, שמעביר עבורך את searchParams:
// app/cms-preview_/[...slug]/page.tsx
import { ParametricRoutePreviewPage } from 'cms-renderer/lib/renderer';
import { registry } from '@/lib/registry';
import { cmsConfig } from '@/lib/cms-config';
// Dynamic rendering — allows searchParams for edit_mode
export const dynamic = 'force-dynamic';
interface PageProps {
params: Promise<{ slug: string[] }>;
searchParams: Promise<{ [key: string]: string | string[] | undefined }>;
}
export default async function PreviewPage({ params, searchParams }: PageProps) {
const { slug } = await params;
return (
<ParametricRoutePreviewPage
registry={registry}
apiKey={cmsConfig.apiKey}
websiteId={cmsConfig.websiteId}
cmsUrl={cmsConfig.cmsUrl}
params={Promise.resolve({ slug })}
searchParams={searchParams}
/>
);
}
אין צורך לחבר את שכבות־העל באופן ידני — העברת searchParams למעבד התצוגה המקדימה היא כל מה שנדרש. נתיב הייצור שלך (`app/[...slug]/page.tsx) נשאר סטטי עם  ParametricRoutePage ואינו זקוק ל־ searchParams`. למערך המלא של שני הנתיבים, ראו הגדרת פרויקט CMS היברידי.
/admin באתר שלכםשכבות־העל והתצוגות המקדימות החיות אמורות לפעול באופן אוטומטי.
הגדירו את נתיבי הייצור והתצוגה המקדימה המלאים במדריך הגדרת פרויקט CMS היברידי.