עריכת תוכן חיה: עריכה חזותית ב-Next.js וב-Sanity CMS

עורכי תוכן מבזבזים זמן בחיפוש שדות בפאנל הניהול במקום להתמקד בטקסט. אנחנו מיישמים את Sanity Visual Editing ו-Presentation Tool כך שהעריכות נעשות ישירות על העמוד עם עדכונים מיידיים. הצוות שלנו מספק את הפרויקט במפתח מלא—מההתקנה ועד התמיכה—ומבטיח נוחות לעורך ופתרון אמין.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
עריכת תוכן חיה: עריכה חזותית ב-Next.js וב-Sanity CMS
בינוני
~2-3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

עורכי תוכן מתלוננים לעתים קרובות: כדי לתקן פסקה, צריך לפתוח את Sanity Studio, למצוא את השדה הנכון, לשמור, לעבור לאתר ולרענן את הדף. אובדן הקשר וזמן. אנחנו פותרים בעיה זו עם Sanity Visual Editing ו-Presentation Tool—מצב שבו עריכות נעשות ישירות על דף האתר.

Sanity Visual Editing הופך את האתר לממשק אינטראקטיבי עבור עורכים: לחיצה על טקסט פותחת את השדה המתאים ב-Sanity Studio, והשינוי מוחל באופן מיידי עם תצוגה מקדימה חיה. זו לא רק תצוגה מקדימה—זו עריכה אינטראקטיבית מלאה. לפי ההערכה שלנו, הגדרה זו מקצרת את זמן עריכת התוכן ב-60%, ובפרויקטים עם מספר מחברים, פרודוקטיביות הצוות עולה ב-30-40%.

כיצד Visual Editing מאיץ את עבודת העורך?

בלב הטכנולוגיה נמצאים Content Source Maps. כאשר אתה מבקש נתונים דרך next-sanity עם הדגל stega: true, Sanity מזריק מטא-דאטה בלתי נראה למחרוזות. הם מציינים מאיזה מסמך ושדה מגיע הטקסט. Visual Editing קורא את הסממנים האלה בעת לחיצה על אלמנט ופותח את השדה המתאים ב-Studio. העורך לא צריך לחפש קטע או מסמך—הכל קורה בהקשר של הדף.

גישה זו מהירה יותר מאשר Preview קלאסי, הדורש טעינת דף מלאה וחיפוש שדה ידני. Visual Editing עובד דרך iframe ו-WebSocket—שינויים מופיעים תוך 200-300 אלפיות השנייה. השתמשנו בהגדרה זו ביותר מ-10 פרויקטים, וזמן העריכה ירד ב-60% בממוצע. לפי תיעוד Sanity Visual Editing, Content Source Maps הם המנגנון המרכזי לקישור נתונים עם העורך החזותי.

מדוע Content Source Maps הם הבסיס ל-Visual Editing?

Content Source Maps מוסיפים מטא-דאטה לתגובת ה-API על מקורו של כל שדה. כאשר stega מופעל, מחרוזות תוכן מכילות תווים בלתי נראים עם מידע על הסכמה, המסמך והנתיב. Visual Editing קורא את הסממנים האלה בעת לחיצה על אלמנט ויודע בדיוק איזה שדה לפתוח ב-Studio. זה מבטל חיפוש ידני—העורך לוחץ על טקסט בדף ומיד מגיע לשדה הנכון. ללא Content Source Maps, Visual Editing היה רק תצוגה מקדימה ללא אינטראקטיביות.

מידע נוסף על הגדרת stega

כדי ש-Visual Editing יעבוד, יש להפעיל stega בצד הלקוח. בלעדיו, העורך יכול רק לצפות אך לא ללחוץ על אלמנטים. הנה דוגמה להגדרה:

// lib/sanity/client.ts
import { createClient } from 'next-sanity'

const client = createClient({
  projectId: process.env.NEXT_PUBLIC_SANITY_PROJECT_ID!,
  dataset: 'production',
  apiVersion: '2024-01-01',
  useCdn: false,
  stega: {
    enabled: true,
    studioUrl: process.env.NEXT_PUBLIC_SANITY_STUDIO_URL!,
  },
})

לתצוגה מקדימה חיה עם WebSocket אנו משתמשים ב-// lib/sanity/client.ts import { createClient } from 'next-sanity' const client = createClient({ projectId: process.env.NEXT_PUBLIC_SANITY_PROJECT_ID!, dataset: 'production', apiVersion: '2024-01-01', useCdn: false, stega: { enabled: true, studioUrl: process.env.NEXT_PUBLIC_SANITY_STUDIO_URL!, }, }) . חבילה זו מחברת את defineLive ומעדכנת נתונים אוטומטית כאשר יש שינוי ב-Studio. העורך רואה עריכות בזמן אמת ללא טעינה מחדש.

שלב 1: הגדרת Studio

התקן את התוסף useOptimistic והגדר את @sanity/presentation תוך ציון המקור והמסלולים עבור Draft Mode. דוגמה להגדרה:

// sanity.config.ts
import { presentationTool } from '@sanity/presentation'

export default defineConfig({
  plugins: [
    structureTool(),
    presentationTool({
      previewUrl: {
        previewMode: {
          enable: '/api/draft-mode/enable',
          disable: '/api/draft-mode/disable',
        },
        origin: process.env.SANITY_STUDIO_PREVIEW_URL || 'http://localhost:3000',
      },
    }),
  ],
})

שלב 2: יישום Draft Mode ב-Next.js

צור מסלולי API previewUrl ו-// sanity.config.ts import { presentationTool } from '@sanity/presentation' export default defineConfig({ plugins: [ structureTool(), presentationTool({ previewUrl: { previewMode: { enable: '/api/draft-mode/enable', disable: '/api/draft-mode/disable', }, origin: process.env.SANITY_STUDIO_PREVIEW_URL || 'http://localhost:3000', }, }), ], }) , תוך שימוש ב-/api/draft-mode/enable כדי לאמת את הטוקן הסודי.

// app/api/draft-mode/enable/route.ts
import { validatePreviewUrl } from '@sanity/preview-url-secret'
import { client } from '@/lib/sanity/client'
import { draftMode } from 'next/headers'
import { redirect } from 'next/navigation'

export async function GET(req: Request) {
  const { isValid, redirectTo = '/' } = await validatePreviewUrl(
    client.withConfig({ token: process.env.SANITY_API_TOKEN! }),
    req.url
  )

  if (!isValid) {
    return new Response('Invalid secret', { status: 401 })
  }

  draftMode().enable()
  redirect(redirectTo)
}
// app/api/draft-mode/disable/route.ts
import { draftMode } from 'next/headers'
import { NextRequest, NextResponse } from 'next/server'

export async function GET(req: NextRequest) {
  draftMode().disable()
  return NextResponse.redirect(new URL('/', req.url))
}

שלב 3: חיבור הלקוח

הוסף את /api/draft-mode/disable ל-layout, הגדר את validatePreviewUrl ו-// app/api/draft-mode/enable/route.ts import { validatePreviewUrl } from '@sanity/preview-url-secret' import { client } from '@/lib/sanity/client' import { draftMode } from 'next/headers' import { redirect } from 'next/navigation' export async function GET(req: Request) { const { isValid, redirectTo = '/' } = await validatePreviewUrl( client.withConfig({ token: process.env.SANITY_API_TOKEN! }), req.url ) if (!isValid) { return new Response('Invalid secret', { status: 401 }) } draftMode().enable() redirect(redirectTo) } לעדכונים חיים.

מה כלול בהגדרה?

אנו מספקים מחזור עבודה מלא—מביקורת ועד פריסה עם הדרכת עורכים:

שלב מה אנחנו עושים תוצאה
ביקורת פרויקט בדיקת סכמה, ניתוב, גרסאות חבילות דוח עם המלצות
עיצוב קביעה היכן נדרש Visual Editing, אילו שדות תוכנית אינטגרציה
הגדרת Studio התקנת Presentation Tool, הגדרת תצוגה מקדימה ממשק עריכה עובד
אינטגרציית Frontend הוספת Draft Mode, VisualEditingProvider, תצוגה מקדימה חיה תצוגה מקדימה אינטראקטיבית
בדיקות בדיקת כל התרחישים: אורח, עורך, מנהל רשימת בדיקות עברה
פריסה הגדרת שרת דמו, CI/CD, משתני סביבה ייצור עובד
הדרכה תיעוד ו-1-2 מפגשים עם עורכים צוות מוכן לעבודה

השוואה עם חלופות:

קריטריון Sanity Visual Editing תצוגה מקדימה רגילה
זמן תגובה 200-300 אלפיות השנייה (WebSocket) 2-3 שניות (טעינה מחדש)
הקשר העורך רואה את האתר, לוחץ על אלמנט צריך למצוא שדה ב-Studio
עומק עריכות כל אלמנט, כולל תמונות רק טקסט או בלוקים
תמיכה בשינויים זמן אמת באמצעות useOptimistic דורש רענון ידני

לוחות זמנים וניסיון

הגדרת Visual Editing עם Presentation Tool ו-Draft Mode אורכת בין יום ליומיים עבור פרויקט טיפוסי. עבור פרויקטים מורכבים, לוח הזמנים עשוי להתארך ל-3–5 ימים. העלות מחושבת באופן אישי—אנו מעריכים את הפרויקט שלך ביום עבודה אחד.

הזמן מאיתנו הגדרת Visual Editing—אנו מבטיחים אינטגרציה נכונה בזכות ניסיון של 10+ שנים ו-50+ אינטגרציות CMS מוצלחות. פשוט צור קשר דרך מסנג'ר או דוא"ל—נשלח דוגמת יישום עבור הפרויקט שלך.