مقدمة
تعامل مع تقديم النماذج واسترجاع بيانات النماذج.
🎯 ماذا يفعل هذا الموديل؟
يتيح لك موديل FormData تقديم النماذج المملوءة من قبل المستخدمين (نماذج الاتصال، الاستطلاعات، التسجيلات) إلى OneEntry واسترجاع البيانات المقدمة للتحليل، والتقارير، والإدارة.
فكر في الأمر كمدير تقديم النماذج الخاص بك - يقوم المستخدمون بتقديم النماذج، وأنت تخزنها في OneEntry، وتسترجعها كلما احتجت إلى عرض الردود، أو توليد التقارير، أو تحليل البيانات.
📖 شرح بسيط
تخيل أن لديك نموذج اتصال على موقعك. عندما يقوم المستخدمون بملئه:
- تقديم - ينقر المستخدم على "إرسال" → تذهب بيانات النموذج إلى OneEntry
- تخزين - يقوم OneEntry بحفظ التقديم (الاسم، البريد الإلكتروني، الرسالة)
- استرجاع - تقوم بجلب التقديمات لعرضها، أو تصديرها، أو تحليلها
- إدارة - تصفية، بحث، وتنظيم ردود النماذج
سير العمل في العالم الحقيقي:
User fills contact form
↓
postFormsData() → Saved in OneEntry
↓
getFormsDataByMarker() → OneEntry returns data
↓
Admin views submissions
ما يمكنك القيام به:
- 📤 تقديم النماذج - إرسال البيانات المملوءة من قبل المستخدمين إلى OneEntry
- 📥 عرض التقديمات - الحصول على جميع ردود النماذج مع الترقيم
- 🔍 البحث عن التقديمات - العثور على تقديمات محددة بواسطة علامة أو فلتر
- 📊 تصدير البيانات - استرجاع التقديمات للتقارير والتحليل
- 📧 إدارة الردود - تتبع تقديمات النماذج في مكان واحد
سيناريوهات مثال:
| السيناريو | ماذا يحدث |
|---|---|
| نموذج الاتصال | يقوم المستخدم بالتقديم → تتلقى إشعار عبر البريد الإلكتروني → عرض في لوحة التحكم |
| استطلاع | جمع الردود → تصدير إلى CSV → تحليل النتائج |
| تسجيل | يقوم المستخدم بالتسجيل → يتم تخزين البيانات → إرسال بريد تأكيد |
| تعليقات | يترك العميل تعليقات → يقوم الفريق بمراجعتها → الرد على العميل |
✨ المفاهيم الأساسية
ما هي بيانات النموذج؟
بيانات النموذج هي المعلومات التي يقدمها المستخدمون من خلال النماذج
هيكل تقديم النموذج
كل تقديم في OneEntry يحتوي على:
const body: IBodyPostFormData = {
formIdentifier: 'contact_form', // Form marker
formModuleConfigId: 9, // Module config ID
moduleEntityIdentifier: 'blog', // Module entity identifier
replayTo: null, // Email address to reply to
status: 'sent', // Submission status
formData: [ // Form fields
{
marker: 'string', // Field marker
type: 'string', // Field type
value: 'Test', // Field value
},
]
};
دورة حياة بيانات النموذج
1. User fills form in browser
↓
2. Frontend validates input
↓
3. postFormsData() sends to OneEntry
↓
4. OneEntry validates & stores form data submission
↓
5. Notifications sent (email, webhook)
↓
6. Admin retrieves with getFormsDataByMarker()
↓
7. Review, export, or respond
حالات الاستخدام الشائعة
| حالة الاستخدام | الوصف | المثال |
|---|---|---|
| نماذج الاتصال | يتواصل العملاء مع أسئلة | يقوم فريق الدعم بمراجعة والرد |
| توليد العملاء المحتملين | جمع معلومات العملاء المحتملين | يتابع فريق المبيعات |
| استطلاعات | جمع التعليقات والآراء | يقوم التسويق بتحليل النتائج |
| التسجيلات | التسجيل في الفعاليات، النشرات | تتبع الحضور/المشتركين |
| طلبات العمل | جمع السير الذاتية ورسائل التغطية | يقوم قسم الموارد البشرية بمراجعة المرشحين |
| نماذج التعليقات | رضا العملاء والتعليقات | تحسين المنتجات/الخدمات |
📋 ما تحتاج إلى معرفته
تقديم النماذج يتطلب تكوين
قبل التقديم، تحتاج إلى:
- علامة النموذج - معرف نص فريد للنموذج
- معرف تكوين وحدة النموذج - من إعدادات النموذج
- معرف كيان الوحدة - من تكوين النموذج
كيفية الحصول على هذه:
// Fetch form
const form = await Forms.getFormByMarker('contact_form');
// Extract required IDs
const formModuleConfigId = form.moduleFormConfigs[0].id;
const moduleEntityIdentifier = form.moduleFormConfigs[0].entityIdentifiers[0].id;
// Now you can submit
لماذا تحتاجها؟ يحتاج OneEntry إلى معرفة:
- أي قالب نموذج يجب استخدامه
- أين يتم تخزين البيانات
- ما هي قواعد التحقق التي يجب تطبيقها
هيكل بيانات النموذج
تحتوي مصفوفة formData على كائنات الحقول:
formData: [
{
marker: "field_name", // Field identifier
type: "text" // Field type
value: "user_input", // User's input
}
]
مهم:
- يجب أن تتطابق
markerمع علامات الحقول من تعريف النموذج typeمفيد للتحققvalueيحتوي على إدخال المستخدم
حالة التقديم
استخدم status لتتبع حالة التقديم:
| الحالة | المعنى | متى تستخدم |
|---|---|---|
"sent" | تم تقديمه بنجاح | الافتراضي للتقديمات الجديدة |
"pending" | في انتظار المراجعة | يتطلب الاعتدال |
"processed" | تم التعامل معه بواسطة المسؤول | تم وضع علامة كمراجعة |
"archived" | تقديم قديم/مغلق | الاحتفاظ بالسجلات |
الترقيم
استرجع التقديمات على دفعات.
علامة النموذج
طريقة واحدة لتحديد التقديمات:
| المعرف | ما هو | متى تستخدم |
|---|---|---|
| علامة النموذج | معرف قالب النموذج | الحصول على جميع التقديمات لنموذج معين |
📊 جدول مرجعي سريع
| الطريقة | الوصف | حالة الاستخدام |
|---|---|---|
| postFormsData() | تقديم بيانات نموذج جديدة | يقوم المستخدم بتقديم نموذج الاتصال |
| getFormsDataByMarker() | الحصول على التقديمات لنموذج معين | عرض جميع تقديمات نموذج الاتصال |
❓ الأسئلة الشائعة (FAQ)
كيف أقدم نموذجًا؟
تحتاج إلى ثلاثة أشياء:
- تكوين النموذج من
Forms.getFormByMarker() - بيانات إدخال المستخدم
- استدعاء
FormData.postFormsData()
هل يمكنني تحديث بيانات النموذج المقدمة؟
ليس مباشرة. عادةً ما تكون تقديمات النموذج غير قابلة للتغيير للحفاظ على سلامة البيانات.
طرق بديلة:
- تقديم نسخة جديدة مع بيانات محدثة
- استخدام حقل
statusلوضع علامة على التقديمات القديمة على أنها غير صالحة - تنفيذ منطق تحديث مخصص في الواجهة الأمامية الخاصة بك
كيف أتعامل مع تحميل الملفات في النماذج؟
استخدم ببساطة File أو FileList مع FormData.postFormsData() أو قم بتحميل الملفات بشكل منفصل باستخدام وحدة FileUploading، ثم قم بتضمين عناوين URL للملفات في بيانات النموذج
كيف يمكنني تصفية التقديمات حسب التاريخ؟
استخدم معلمات الجسم dateFrom و dateTo.
هل يمكنني البحث عن التقديمات حسب قيمة الحقل؟
نعم، قم بجلب التقديمات وابحث في الجانب العميل
كيف يمكنني الترقيم عبر جميع التقديمات؟
استخدم offset و limit
كيف أتعامل مع أخطاء التحقق؟
استخدم try/catch وتحقق من رسائل الخطأ
💡 ملاحظات مهمة
⚠️ يتطلب تكوين النموذج
لا يمكنك تقديم النماذج بدون تكوين:
formModuleConfigIdوmoduleEntityIdentifierهما مطلوبان- احصل على هذه من
Forms.getFormByMarker()قبل التقديم - قم بتخزينها في تطبيقك لتجنب المكالمات المتكررة لواجهة برمجة التطبيقات
🔒 اعتبارات الأمان
لا تكشف عن البيانات الحساسة:
- لا تقدم كلمات المرور كنص عادي
- تحقق من الإدخال على كل من العميل والخادم
- قم بتنظيف إدخال المستخدم قبل العرض
📦 مجموعات البيانات الكبيرة
الترقيم مهم:
- لا تقم بجلب آلاف التقديمات دفعة واحدة
- استخدم
limitوoffsetللترقيم - ضع في اعتبارك التخزين المؤقت للبيانات التي يتم الوصول إليها بشكل متكرر
🔄 قراءة فقط بعد التقديم
بيانات النموذج غير قابلة للتغيير:
- لا يمكن تحديث التقديمات عبر SDK
- قدم نسخة جديدة إذا كانت التغييرات مطلوبة
- استخدم حقل
statusلتتبع حالة التقديم
🎓 أفضل الممارسات
- تخزين تكوين النموذج في الذاكرة - تجنب الجلب في كل تقديم
- تحقق قبل التقديم - تحقق من الحقول المطلوبة على جانب العميل
- استخدم الترقيم - جلب التقديمات على دفعات
- تعامل مع الأخطاء بشكل لطيف - استخدم دائمًا try/catch
- استخدم العلامات بشكل متسق - ارجع إلى النماذج بواسطة العلامة، وليس المعرف
- تتبع حالة التقديم - استخدم حقل الحالة لتنظيم التقديمات
- تصدير البيانات بانتظام - احتفظ بنسخة احتياطية من التقديمات إلى CSV/قاعدة البيانات
- راقب التقديمات الجديدة - نفذ الاستطلاع أو الويب هوكس
تعريف وحدة FormData
const { FormData } = defineOneEntry( "your-project-url", { "token": "your-app-token" });
إعدادات النموذج:
- احصل على النموذج بواسطة العلامة باستخدام Forms.getFormByMarker('your-form-marker').
- استخدم حقل moduleFormConfigs من النموذج المسترجع للتكوين المستخدم عند تقديم بيانات النموذج.
- أنشئ الجسم باستخدام moduleFormConfig وقدم بيانات النموذج.
const formModuleConfigId = moduleFormConfigs[0].id;const moduleEntityIdentifier = moduleFormConfigs[0].entityIdentifiers[0].id;
const body = { "formIdentifier": "your-form-marker", "formModuleConfigId": formModuleConfigId, "moduleEntityIdentifier": moduleEntityIdentifier, "replayTo": null, "status": "sent", "formData": [...]};
const response = await FormData.postFormsData(body);
🔗 الوثائق ذات الصلة
- وحدة النماذج - إنشاء وإدارة هياكل النماذج
- وحدة تحميل الملفات - التعامل مع تحميل الملفات في النماذج
- وحدة الأحداث - إعداد إشعارات مدفوعة بالأحداث
- وحدة المستخدمين - إدارة المستخدمين الذين يقدمون النماذج