مدیریت محتوا
یک CMS بدون سر (headless) با مجموعهها، ورودیها، زبانها و انتشارها. محتوا را از پنل Content یا SDK مدیریت کنید.
Proyecta یک CMS بدون سر کامل دارد. این سیستم schema-محور است: شما collections (انواع محتوای ساختاریافته) تعریف میکنید، سپس entries هایی میسازید که با فیلدهای هر collection مطابقت دارند. Entries میتوانند بومیسازی شوند و در releases گروهبندی شوند.
پنل Content
Section titled “پنل Content”محتوا میتواند از طریق SDK یا با درخواست از هوش مصنوعی مدیریت شود. Content API شش نوع منبع دارد:
| تب / منبع | کاربرد |
|---|---|
| Collections | تعریف و مدیریت schema های محتوا (مثلاً «پست وبلاگ»، «سؤالات متداول»، «مشخصات محصول») |
| Fields | جایگاههای تایپشده درون یک collection (بهعنوان زیرمنبع Collections مدیریت میشوند) |
| Entries | مرور، ایجاد، ویرایش، انتشار و حذف entries درون یک collection |
| Locales | افزودن و مدیریت زبانها/مناطق برای محتوای ترجمهشده |
| Releases | گروهبندی entries برای انتشار (یا لغو انتشار) همزمان؛ انتشار دستی از طریق releases.publish() |
| Assets | آپلود و مدیریت فایلهای رسانهای (تصاویر، ویدیوها، PDF) قابل ارجاع از entries |
برای رفتن به entries یک collection، روی آن در تب Collections کلیک کنید. تب Entries به شما امکان میدهد آیتمهای محتوا را بهصورت جداگانه ایجاد، ویرایش، منتشر و حذف کنید.
همچنین میتوانید همه چیز را بهصورت برنامهنویسی از طریق SDK (proyecta.content) مدیریت کنید.
مفاهیم
Section titled “مفاهیم”| مفهوم | توضیح |
|---|---|
| Collection | یک schema — ساختار یک نوع محتوا (مثلاً «پست وبلاگ»، «سؤالات متداول»، «مشخصات محصول») |
| Field | یک جایگاه تایپشده در یک collection (مثلاً title: string، body: rich_text، coverImage: asset) |
| Entry | یک نمونه از یک collection (یک پست وبلاگ، یک آیتم سؤالات متداول) |
| Asset | یک فایل رسانهای آپلودشده که میتوان از entries به آن ارجاع داد |
| Locale | یک زبان/منطقه که محتوا به آن ترجمه میشود |
| Release | گروهی از entries که قرار است همزمان منتشر (یا لغو انتشار) شوند |
شروع سریع
Section titled “شروع سریع”import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });
// 1. Define a collectionconst blog = await proyecta.content.collections.create({ api_id: 'blogPost', name: 'Blog Post', // fields are added via collections.fields.create()});
// 2. Create an entryconst post = await proyecta.content.entries.create({ collection_id: blog.id, data: { title: 'Hello, world', body: 'My very first post.', },});
// 3. Publish itawait proyecta.content.entries.publish({ entryId: post.id });Collections
Section titled “Collections”// Browse collectionsfor await (const collection of proyecta.content.collections.list()) { console.log(collection.name);}
// Add or remove fields on a collectionawait proyecta.content.collections.fields.create(blog.id, { /* field definition */});await proyecta.content.collections.fields.delete(blog.id, fieldId);Entries
Section titled “Entries”Entries همان ردیفهای محتوای واقعی هستند. هر entry به یک collection تعلق دارد و دادههایی متناسب با فیلدهای آن collection را در خود نگه میدارد.
// Browse entries (pass the collection's api_id, not its numeric id)for await (const entry of proyecta.content.entries.list({ collection: 'blogPost' })) { console.log(entry);}
// Update an entryawait proyecta.content.entries.update(post.id, { data: { title: 'Updated title' } });
// Publish an entryawait proyecta.content.entries.publish({ entryId: post.id });
// Delete an entryawait proyecta.content.entries.delete(post.id);Assets
Section titled “Assets”آپلود asset ها در اولویت هستند — از آنها برای پیوست کردن تصاویر، ویدیوها یا PDF به entries خود استفاده کنید:
// Browse assetsfor await (const asset of proyecta.content.assets.list()) { console.log(asset);}
// Upload, update, or delete via assets.create / assets.update / assets.deleteبرای آپلود فایل از طریق چت (کشیدن و رها کردن در builder)، به Files & Media مراجعه کنید.
بومیسازی
Section titled “بومیسازی”محتوا میتواند به چندین locale ترجمه شود. هر locale یک رکورد است که از طریق proyecta.content.locales مدیریت میشود:
await proyecta.content.locales.create({ /* code, name, etc. */});
for await (const locale of proyecta.content.locales.list()) { console.log(locale);}هنگام دریافت entries، میتوانید ترجمه یک locale خاص را درخواست کنید. برای تصویر کلیتر از i18n، به Internationalization مراجعه کنید.
Releases
Section titled “Releases”یک release مجموعهای از entries است که همزمان منتشر (یا لغو انتشار) میشوند. این امکان به شما میدهد یک انتشار محتوای هماهنگ — یک راهاندازی بازاریابی، یک صفحه محصول جدید، یک بازبینی سؤالات متداول — را آماده کنید و همه چیز بهصورت اتمی تغییر کند.
توجه: انتشار زمانبندیشده خودکار هنوز پیادهسازی نشده است. Releases با تاریخ
scheduled_atوارد وضعیتscheduledمیشوند اما باید بهصورت دستی از طریقreleases.publish()منتشر شوند. انتشار خودکار در زمان مشخصشده به زودی اضافه میشود.
// Create a release (optionally with a target date)const release = await proyecta.content.releases.create({ name: 'Monday launch', scheduled_at: '2024-01-08T09:00:00Z',});
// Manually publish a release when readyawait proyecta.content.releases.publish({ releaseId: release.id });
// Browse releasesfor await (const r of proyecta.content.releases.list()) { console.log(r);}برای تغییر زمانبندی یک release، آن را حذف کرده و دوباره بسازید — هیچ endpoint ی برای بهروزرسانی وجود ندارد.
الگوهای رایج (بگذار هوش مصنوعی آن را راهاندازی کند)
Section titled “الگوهای رایج (بگذار هوش مصنوعی آن را راهاندازی کند)”«یک وبلاگ با استفاده از Proyecta Content API بساز. Collection 'Blog Post' با فیلدهای: title، slug، excerpt، body (rich text)، coverImage (asset)، author. مسیر عمومی در /blog و /blog/[slug].»«یک collection سؤالات متداول در Proyecta Content بساز. یک صفحه ادمین برای افزودن/ویرایش سؤالات متداول و یک صفحه عمومی /faq بساز.»«یک صفحه فرود چندزبانه با استفاده از Proyecta Content و locale های انگلیسی و اسپانیایی راهاندازی کن.»«یک release شامل سه پست وبلاگ بساز و هنگامی که آماده شد آن را بهصورت دستی منتشر کن.»
چه زمانی از Content استفاده کنیم در مقابل Database
Section titled “چه زمانی از Content استفاده کنیم در مقابل Database”| موارد استفاده | از این استفاده کن |
|---|---|
| محتوای سرمقالهای (پستها، سؤالات متداول، متنهای بازاریابی) — نیاز به وضعیت publish/draft، زمانبندی، بومیسازی | Content API |
| دادههای اپلیکیشن (کاربران، سفارشها، آیتمهای سفارش) — نیاز به سرعت کوئری، تراکنشها، real-time | Database |
| Asset های استاتیک در کد | دایرکتوری public/ در پروژهات |
| فایلهای آپلودشده توسط کاربر | Files & Media |
به زودی
Section titled “به زودی”- ویرایشگر rich-text برای entries — ویرایش کامل WYSIWYG برای فیلدهای
rich_textدر پنل Content - پیشنمایش زنده تغییرات محتوا در اپلیکیشن
- نقشهای محتوا — جداسازی مجوزهای ویرایشگر از مجوزهای توسعهدهنده