إدارة المحتوى
نظام CMS بدون واجهة أمامية يدعم المجموعات والمداخل والإصدارات المحلية والإصدارات العامة. أدِر المحتوى من لوحة Content أو عبر SDK.
تمتلك Proyecta نظام CMS متكاملاً بدون واجهة أمامية. يعتمد النظام على المخطط أولاً: تُعرّف مجموعات (أنواع محتوى منظّمة)، ثم تُنشئ مداخل تتوافق مع حقول كل مجموعة. يمكن ترجمة المداخل وتجميعها في إصدارات.
لوحة Content
Section titled “لوحة Content”يمكن إدارة المحتوى عبر SDK أو بطلب المساعدة من الذكاء الاصطناعي. تضم واجهة Content API ستة أنواع من الموارد:
| التبويب / المورد | الغرض منه |
|---|---|
| Collections | تعريف وإدارة مخططات المحتوى (مثل “مقالة مدونة”، “أسئلة شائعة”، “مواصفات المنتج”) |
| Fields | خانات مُحدَّدة النوع داخل مجموعة (تُدار كمورد فرعي من Collections) |
| Entries | تصفح المداخل وإنشاؤها وتحريرها ونشرها وحذفها داخل مجموعة |
| Locales | إضافة وإدارة الإصدارات المحلية للغات والمناطق من أجل المحتوى المترجم |
| Releases | تجميع المداخل للنشر (أو إلغاء النشر) معاً؛ النشر يدوياً عبر releases.publish() |
| Assets | رفع وإدارة ملفات الوسائط (صور، فيديوهات، ملفات PDF) القابلة للإشارة إليها من المداخل |
انقر على مجموعة في تبويب Collections للانتقال مباشرةً إلى مداخلها. يتيح لك تبويب Entries إنشاء عناصر المحتوى الفردية وتحريرها ونشرها وحذفها.
يمكنك أيضاً إدارة كل شيء برمجياً عبر SDK (proyecta.content).
المفاهيم الأساسية
Section titled “المفاهيم الأساسية”| المفهوم | ما هو |
|---|---|
| Collection | مخطط — يُحدد شكل نوع واحد من المحتوى (مثل “مقالة مدونة”، “أسئلة شائعة”، “مواصفات المنتج”) |
| Field | خانة محدَّدة النوع داخل مجموعة (مثل title: string، body: rich_text، coverImage: asset) |
| Entry | نسخة واحدة من مجموعة (مقالة مدونة واحدة، سؤال شائع واحد) |
| Asset | ملف وسائط مرفوع يمكن الإشارة إليه من المداخل |
| Locale | لغة أو منطقة يُترجم إليها المحتوى |
| Release | مجموعة من المداخل مجدوَلة للنشر (أو إلغاء النشر) في الوقت ذاته |
البدء السريع
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 });المجموعات
Section titled “المجموعات”// 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);المداخل
Section titled “المداخل”المداخل هي صفوف المحتوى الفعلية. كل مدخل ينتمي إلى مجموعة ويحمل بيانات تتوافق مع حقول تلك المجموعة.
// 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);الأصول
Section titled “الأصول”رفع الأصول مدعوم بشكل رئيسي — استخدمه لإرفاق صور أو فيديوهات أو ملفات PDF بمداخلك:
// Browse assetsfor await (const asset of proyecta.content.assets.list()) { console.log(asset);}
// Upload, update, or delete via assets.create / assets.update / assets.deleteللاطلاع على رفع الملفات عبر الدردشة (سحب الملفات إلى المحرر)، راجع الملفات والوسائط.
الترجمة والتعريب
Section titled “الترجمة والتعريب”يمكن ترجمة المحتوى إلى إصدارات محلية متعددة. كل إصدار محلي هو سجل يُدار عبر proyecta.content.locales:
await proyecta.content.locales.create({ /* code, name, etc. */});
for await (const locale of proyecta.content.locales.list()) { console.log(locale);}عند جلب المداخل، يمكنك طلب ترجمة إصدار محلي معيّن. راجع التدويل للاطلاع على الصورة الشاملة لـ i18n.
الإصدارات
Section titled “الإصدارات”الإصدار هو حزمة من المداخل تُنشر (أو يُلغى نشرها) في الوقت ذاته. يتيح لك هذا إعداد إطلاق محتوى منسّق — حملة تسويقية، صفحة منتج جديدة، تحديث للأسئلة الشائعة — وتفعيل كل شيء دفعةً واحدة.
ملاحظة: النشر التلقائي المزمَّن غير متاح بعد. الإصدارات التي تحمل تاريخ
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);}لتغيير جدول إصدار ما، احذفه وأعد إنشاءه — لا يوجد endpoint للتحديث.
أنماط شائعة (دع الذكاء الاصطناعي يُنجزها)
Section titled “أنماط شائعة (دع الذكاء الاصطناعي يُنجزها)”"Build a blog using the Proyecta Content API. Collection 'Blog Post' with fields: title, slug, excerpt, body (rich text), coverImage (asset), author. Public route at /blog and /blog/[slug].""Create an FAQ collection in Proyecta Content. Build an admin page where I can add/edit FAQs and a public /faq page.""Set up a multi-language landing page using Proyecta Content with English and Spanish locales.""Create a release containing three blog posts and publish it manually when ready."
متى تستخدم Content مقابل Database
Section titled “متى تستخدم Content مقابل Database”| حالة الاستخدام | استخدم هذا |
|---|---|
| المحتوى التحريري (مقالات، أسئلة شائعة، نصوص تسويقية) — يحتاج إلى حالات النشر/المسودة والجدولة والترجمة | Content API |
| بيانات التطبيق (مستخدمون، طلبات، بنود) — يحتاج إلى سرعة الاستعلام والمعاملات والوقت الفعلي | Database |
| الأصول الثابتة في الكود | مجلد public/ في مشروعك |
| الملفات التي يرفعها المستخدمون | الملفات والوسائط |
قريباً
Section titled “قريباً”- محرر النصوص المنسَّقة — تحرير WYSIWYG كامل لحقول
rich_textفي لوحة Content - معاينة مباشرة لتغييرات المحتوى على تطبيقك
- أدوار المحتوى — فصل صلاحيات المحررين عن صلاحيات المطورين