رفتن به محتوا

مدیریت محتوا

سیستم مدیریت محتوای Proyecta لایه‌ی اصلی داده‌های اپ شماست — نه فقط پست‌های وبلاگ و محتوای بازاریابی، بلکه رکوردهای واقعی‌ای که اپ‌تان روی آن‌ها ساخته می‌شود. مجموعه‌ها راه‌اندازی شده و با محتوای نمونه‌ی واقعی پر می‌شوند پیش از اینکه رابط کاربری وجود داشته باشد؛ بنابراین اپ‌تان از همان build اول به داده‌های قابل ویرایش متصل است.

بیشتر اپ‌های Proyecta داده‌هایشان را در سیستم مدیریت محتوای داخلی ذخیره می‌کنند. وقتی اپ خود را توصیف می‌کنید، Proyecta یک مدل داده طراحی می‌کند، مجموعه‌های مورد نیاز را می‌سازد و آن‌ها را با محتوای نمونه‌ی واقعی پر می‌کند — همه این‌ها پیش از ساخت حتی یک صفحه. صفحات شما آن محتوای واقعی و قابل ویرایش توسط مالک را از طریق typed hookهایی می‌خوانند که هوش مصنوعی برایتان سیم‌کشی می‌کند. برای درک کلی از نحوه‌ی کار همه‌ی این‌ها در کنار هم، به نحوه‌ی کار داده‌های اپ شما مراجعه کنید.

برای شروع نیازی نیست به هیچ‌کدام از این‌ها فکر کنید — همه چیز به‌صورت خودکار انجام می‌شود. این صفحه توضیح می‌دهد که زیر این فرایند چه اتفاقی می‌افتد تا بتوانید آن را شکل دهید.

محتوا در قالب مجموعه‌ها و singletonها سازماندهی می‌شود:

نوع چیست مثال‌ها
Collection یک نوع محتوا با ورودی‌های متعدد — یک schema، ردیف‌های زیاد. posts، services، testimonials، catalogItems
Singleton یک نوع محتوا با دقیقاً یک ورودی — محتوای سراسری و یکتا. businessInfo، seoSettings

یک مجموعه یک شکل است؛ هر ورودی یک آیتم از آن شکل است (یک پست وبلاگ، یک سرویس، یک سوال متداول). یک singleton یک رکورد واحد قابل ویرایش نگه می‌دارد — هویت کسب‌وکار شما، یا محتوای hero/section یک صفحه.

Proyecta طرح‌های آماده‌ای برای مجموعه‌ها ارائه می‌دهد — فیلدهای منطقی، راهنمای ادمین و محتوای اولیه — برای انواع رکوردهایی که کسب‌وکارهای واقعی نگه می‌دارند: پست‌های وبلاگ و مقالات، سرویس‌ها، کاتالوگ محصولات، منوی غذایی، نظرات و بررسی‌ها، اعضای تیم، گالری عکس، سوالات متداول، رویدادها، مکان‌ها، منابع قابل دانلود، فرصت‌های شغلی، دوره‌ها، تورها و لیست اقامتگاه‌ها، و موارد دیگر.

هیچ‌وقت لازم نیست از یک منو انتخاب کنید. وقتی اپ خود را توصیف می‌کنید، Proyecta موارد مناسب برای briefتان را انتخاب می‌کند — نوع کسب‌وکار، ویژگی‌های درخواستی، زبان‌تان — و آن‌ها را می‌سازد، از پیش پر شده با محتوای نمونه‌ی واقعی. اگر اپ‌تان به چیزی نیاز داشته باشد که هیچ‌کدام پوشش نمی‌دهند، Proyecta یک custom collection با فیلدهای مخصوص خودش طراحی می‌کند.

به همین دلیل، پنل ادمین اپ شما مجموعه‌های خاص اپ‌تان را نشان می‌دهد — نه یک لیست ثابت. این پنل از مدل محتوای زنده‌ی اپ‌تان ساخته می‌شود؛ بنابراین هر چیزی که Proyecta برایتان ساخته، چه داخلی چه سفارشی، دقیقاً همان چیزی است که می‌بینید و ویرایش می‌کنید. به‌ندرت دو اپ Proyecta مجموعه‌های یکسانی دارند، و این دقیقاً همان هدف است.

هر مجموعه از فیلدهای typed تشکیل شده است. انواع فیلد به‌صورت سرتاسری اعمال می‌شوند — پنل ادمین ویرایشگر مناسب را نمایش می‌دهد و صفحات شما مقادیر با نوع صحیح دریافت می‌کنند.

نوع فیلد کاربرد
string مقادیر کوتاه یک‌خطی — عنوان‌ها، نام‌ها، آدرس‌ها.
text یک پاراگراف متن ساده.
markdown متن غنی بلند — متن مقالات، محتوای «درباره ما».
slug شناسه‌ی URL، به‌صورت خودکار از فیلد دیگری (مثلاً عنوان) استخراج می‌شود.
number تعداد، امتیاز، مدت‌زمان.
money قیمت یا مبلغ ارزی — به‌صورت پول نمایش داده و ویرایش می‌شود.
boolean فلگ‌های روشن/خاموش.
date تاریخ‌های تقویمی.
datetime timestamp — تاریخ انتشار، زمان شروع رویداد.
weeklyHours ساعات کاری برای هر روز هفته.
asset یک تصویر، ویدیو یا PDF (ذخیره‌شده به‌عنوان URL عمومی).
reference لینک به یک ورودی در مجموعه‌ای دیگر.
enum یک مقدار از یک لیست ثابت از گزینه‌ها.
array یک لیست از رشته‌ها — تگ‌ها، شماره تلفن‌ها، مناطق.
blocks بلوک‌های محتوای قابل چیدمان — یک صفحه ساخته‌شده از بخش‌های typed.
json داده‌های ساختاریافته‌ای که در هیچ‌کدام از انواع بالا جا نمی‌شوند.

ورودی‌ها، پیش‌نویس‌ها و انتشار

Section titled “ورودی‌ها، پیش‌نویس‌ها و انتشار”

یک entry یک آیتم در یک مجموعه است. هر ورودی یک وضعیت دارد:

  • Draft — در حال کار؛ هرگز در سایت زنده‌ی شما نمایش داده نمی‌شود.
  • Published — زنده و قابل مشاهده برای بازدیدکنندگان.
  • Archived — بازنشسته، نگه داشته شده اما دور از دسترس.

صفحات عمومی شما فقط ورودی‌های published را می‌بینند — پیش‌نویس‌ها و آیتم‌های archived به‌صورت خودکار پنهان می‌شوند؛ بنابراین می‌توانید محتوا را با خیال راحت آماده کنید پیش از اینکه منتشر شود.

مدیریت محتوا (بدون نیاز به کد)

Section titled “مدیریت محتوا (بدون نیاز به کد)”

دو روش برای افزودن و ویرایش محتوا وجود دارد — هیچ‌کدام نیاز به لمس کد ندارند:

  1. از هوش مصنوعی در چت بخواهید. فقط تغییر را توصیف کنید و هوش مصنوعی محتوای مناسب را برایتان ویرایش می‌کند:
    • "یک testimonial از María González اضافه کن: 'Best service in town'، ۵ ستاره."
    • "tagline در Business Info را به 'Café de especialidad en la Roma' تغییر بده."
    • "پنج submission آخر فرم تماس را به‌عنوان خوانده‌شده علامت بزن."
  2. پنل ادمین اپ‌تان. هر اپ منتشرشده یک پنل ادمین داخلی محافظت‌شده با ورود به سیستم دارد که شما (و کارمندانی که دسترسی می‌دهید) می‌توانید مستقیماً محتوا و submissionهای فرم را مدیریت کنید — یک ویرایشگر به سبک spreadsheet برای هر مجموعه، به‌علاوه‌ی inbox submissionها. این پنل خودش را از مدل محتوای زنده‌ی اپ‌تان پیکربندی می‌کند، بنابراین مجموعه‌های جدید به‌صورت خودکار در آن ظاهر می‌شوند. به پنل ادمین مراجعه کنید.

محتوای CMS خود را از طریق پنل ادمین اپ‌تان یا هوش مصنوعی مدیریت کنید — یک ویرایشگر محتوای داخل builder در roadmap است (به به‌زودی مراجعه کنید). یک مرورگر رکورد realtime برای اپ‌های live-updating به‌زودی می‌آید.

نحوه‌ی خواندن محتوا توسط اپ‌تان

Section titled “نحوه‌ی خواندن محتوا توسط اپ‌تان”

صفحات شما محتوا را از طریق مجموعه‌ای از typed hookها در @/hooks/useContent می‌خوانند — و هوش مصنوعی آن سیم‌کشی را برایتان می‌نویسد. شما صفحه را توصیف می‌کنید؛ Proyecta componentهایی تولید می‌کند که این hookها را روی مجموعه‌های واقعی‌تان فراخوانی می‌کنند. به‌ندرت خودتان آن‌ها را لمس می‌کنید، اما این‌ها کارشان است:

Hook کارش چیست
useCollection('posts') ورودی‌های published یک مجموعه را فهرست می‌کند (با فیلتر/مرتب‌سازی/محدودیت اختیاری).
useEntry('posts', slug) یک ورودی published را با slug واکشی می‌کند (صفحات detail).
useSingleton('businessInfo') یک singleton را می‌خواند (اطلاعات کسب‌وکار، محتوای صفحه).
useFormSubmit('contactForm') یک فرم را submit می‌کند و خطاهای validation را گزارش می‌دهد.
// A blog index — exactly the kind of code the AI generates for you
import { useCollection } from '@/hooks/useContent';
function BlogList() {
const { data: posts, isLoading } = useCollection('posts', { sort: 'published_at:desc' });
if (isLoading) return <Spinner />;
return posts?.map((post) => <PostCard key={post._id} post={post} />);
}

وقتی Proyecta interfaceهای typed برای مجموعه‌هایتان تولید می‌کند، hookها کاملاً typed می‌شوند (useCollection<Post>('posts'))، بنابراین ویرایشگرتان هر فیلد را autocomplete می‌کند. خواندن‌ها از یک snapshot پخته‌شده در اولین paint hydrate می‌شوند — صفحات فوری و SEO-friendly رندر می‌شوند، سپس در پس‌زمینه به‌صورت live به‌روز می‌شوند.

فرم‌ها یک قابلیت درجه‌یک هستند، نه چیزی که هوش مصنوعی دستی بسازد. یک form block قرار دهید و فیلدها را رندر می‌کند، ورودی را validate می‌کند، submit می‌کند و یک حالت موفقیت نشان می‌دهد:

<FormBlock form="contactForm" />

فرم‌ها هم آماده می‌آیند — یک فرم تماس، یک درخواست پیش‌فاکتور، یک فرم رزرو، یک فرم سفارش، یک فرم ثبت‌نام — و Proyecta فرم مناسب را به صفحات شما متصل می‌کند. Submissionها در inbox پنل ادمین اپ‌تان قرار می‌گیرند و مالک هنگام رسیدن یک مورد جدید ایمیل دریافت می‌کند. برای تصویر کامل به فرم‌ها مراجعه کنید.

محتوا می‌تواند به چندین locale ترجمه شود. فیلدهای علامت‌گذاری‌شده به‌عنوان localized یک مقدار به ازای هر زبان ذخیره می‌کنند، و hookهای خواندن آن‌ها را از طریق یک زنجیره‌ی fallback حل می‌کنند (زبان درخواستی ← fallbackهای پیکربندی‌شده ← پیش‌فرض) وقتی locale فعال بازدیدکننده را پاس می‌دهید:

const { data: posts } = useCollection('posts', { locale: 'es' });

اپ‌های تک‌زبانه localeها را کاملاً نادیده می‌گیرند — هیچ چیزی برای پیکربندی وجود ندارد. برای داستان کامل ترجمه، به بین‌المللی‌سازی مراجعه کنید.

یک release چندین ورودی را دسته‌بندی می‌کند تا همزمان منتشر شوند (یا unpublish شوند) — یک انتشار محتوای هماهنگ (یک راه‌اندازی، یک صفحه‌ی محصول جدید، یک بازنویسی FAQ) را آماده کنید و همه را یکجا فعال کنید.

توجه: انتشار خودکار زمان‌بندی‌شده هنوز پیاده‌سازی نشده است. یک release با تاریخ scheduled_at وارد وضعیت scheduled می‌شود اما باید به‌صورت دستی منتشر شود. انتشار خودکار در زمان برنامه‌ریزی‌شده به‌زودی می‌آید.

الگوهای رایج (بگذارید هوش مصنوعی سیم‌کشی کند)

Section titled “الگوهای رایج (بگذارید هوش مصنوعی سیم‌کشی کند)”

به‌ندرت این‌ها را با دست می‌نویسید — توصیف کنید چه می‌خواهید و Proyecta آن را روی مجموعه‌های واقعی می‌سازد:

  • "یک وبلاگ بساز. هر پست عنوان، تصویر cover، متن rich-text، دسته‌بندی و تگ دارد. مسیرهای عمومی در /blog و /blog/[slug]، جدیدترین اول."
  • "یک بخش FAQ اضافه کن که مالک بتواند ویرایش کند، گروه‌بندی‌شده بر اساس دسته‌بندی."
  • "یک لیست سرویس‌های قابل رزرو با یک فرم درخواست پیش‌فاکتور اضافه کن."
  • "سایت را دوزبانه کن — انگلیسی و اسپانیایی — با یک سوئیچ زبان."
  • "testimonialها را با پنج نظر واقعی برای یک کافه‌شاپ پر کن."

داده‌های اپ‌تان کجا ذخیره می‌شوند

Section titled “داده‌های اپ‌تان کجا ذخیره می‌شوند”

CMS خانه‌ی پیش‌فرض برای محتوا و رکوردهای ماندگار است. چند نوع داده به جای آن در سیستم‌های مخصوص خودشان زندگی می‌کنند:

نوع داده کجا ذخیره می‌شود
محتوا و رکوردها (پست‌ها، سرویس‌ها، لیستینگ‌ها، FAQ، کاتالوگ، رزروها) Proyecta CMS (این صفحه) — پیش‌فرض
وضعیت realtime / رفتاری (چت زنده، فیدها، حضور، وضعیت بازی) Realtime storeبه‌زودی
حساب‌های کاربری و ورود به سیستم Auth
محصولات، سفارش‌ها، اشتراک‌ها، پرداخت‌ها Commerce
فایل‌های آپلودشده و رسانه فایل‌ها و رسانه
asset های ثابت پخته‌شده در build دایرکتوری public/ در پروژه‌تان

CMS پیش‌فرض است. یک realtime store برای رفتار واقعاً realtime به‌زودی می‌آید؛ حتی در آن صورت هم، محتوای ماندگار و کاتالوگ commerce همچنان در CMS خواهند بود.

  • ویرایشگر محتوای داخل builder — مرور و ویرایش مجموعه‌های CMS مستقیماً از داشبورد builder (امروز: محتوا را از طریق پنل ادمین یا هوش مصنوعی مدیریت کنید).
  • ویرایشگر WYSIWYG با متن غنی — ویرایش بصری برای فیلدهای markdown (امروز به‌صورت markdown ویرایش می‌شوند).
  • انتشار خودکار زمان‌بندی‌شده — releaseهایی که در زمان برنامه‌ریزی‌شده به‌صورت خودکار منتشر می‌شوند.
  • پیش‌نمایش زنده از تغییرات محتوا روی اپ‌تان.
  • نقش‌های محتوا — جداسازی مجوزهای ویرایشگر از مجوزهای توسعه‌دهنده.