postFormsData
إرسال بيانات النموذج إلى منصة OneEntry.
🎯 ماذا تفعل هذه الطريقة؟
هذه الطريقة ترسل بيانات النموذج إلى منصة OneEntry. فكر في الأمر كما لو كنت تضغط على "إرسال" في نموذج الاتصال - إنها ترسل جميع مدخلات المستخدم (الاسم، البريد الإلكتروني، الرسالة، الملفات، إلخ) إلى الخادم.
حالات الاستخدام:
- 📝 نماذج الاتصال
- 📋 نماذج التسجيل
- 💬 نماذج التعليقات
- 📤 تحميل الملفات
- 🎫 تذاكر الدعم
📖 شرح بسيط
عندما يقوم المستخدم بملء نموذج على موقعك، تحتاج إلى إرسال تلك البيانات إلى مكان ما. هذه الطريقة تفعل ذلك بالضبط - تأخذ جميع حقول النموذج (نصوص، أرقام، ملفات، إلخ) وترسلها إلى OneEntry.
فكر في الأمر كالتالي:
User fills form → Your code calls postFormsData() → Data saved in OneEntry ✅
🚀 مثال بسيط جداً (ابدأ من هنا!)
السيناريو: لديك نموذج اتصال يحتوي فقط على حقل الاسم.
// Step 1: User fills the form (e.g., enters "John Doe")
// Step 2: Send it to OneEntry
const response = await FormData.postFormsData({
formIdentifier: "contact_us", // 👈 Your form's name
formModuleConfigId: 2, // 👈 Form config ID (from OneEntry admin)
moduleEntityIdentifier: "blog", // 👈 Where to save it (from OneEntry)
replayTo: null, // 👈 Reply email (optional)
status: "sent", // 👈 "sent" or "draft"
formData: [ // 👈 The actual form data
{
marker: "name", // 👈 Field name
type: "string", // 👈 Field type
value: "John Doe" // 👈 User's input
}
]
});
// ✅ Done! Form submitted successfully
console.log("Form submitted, ID:", response.formData.id);
هذا كل شيء! الآن دعنا نرى كيف نتعامل مع أنواع الحقول المختلفة...
📋 ما تحتاج لمعرفته قبل الاستخدام
قبل استدعاء هذه الطريقة، تحتاج إلى هذه الأشياء الثلاثة من لوحة إدارة OneEntry:
- formIdentifier - الاسم الفريد لنموذجك (مثل "contact_us")
- formModuleConfigId - معرف تكوين النموذج (رقم، مثل 2)
- moduleEntityIdentifier - المكان الذي سيتم تخزين البيانات فيه (مثل "blog"، "contacts")
كيف تجد هذه؟
- تسجيل الدخول إلى OneEntry Admin
- انتقل إلى قسم النماذج
- انسخ القيم من تكوين النموذج الخاص بك
🔧 توقيع الطريقة
FormData.postFormsData(
body*,
body.formIdentifier*,
body.formModuleConfigId*,
body.moduleEntityIdentifier*,
body.replayTo*,
body.status*,
body.formData*,
body.fileQuery,
langCode
);
مخطط المعلمات
المخطط (body)
body(required): IBodyPostFormData
جسم الطلب
مثال:
{
"formIdentifier": "test-form",
"formModuleConfigId": 2,
"moduleEntityIdentifier": "blog",
"replayTo": null,
"status": "sent",
"formData": [
{
"marker": "name",
"type": "string",
"value": "Test"
}
]
}
body.formIdentifier(required): string
معرف نصي (علامة) للنموذج.
مثال: "form"
body.formModuleConfigId(required): number
المعرف الفريد لتكوين وحدة النموذج.
مثال: 2
body.moduleEntityIdentifier(required): string
معرف نصي (علامة) للكيان في الوحدة.
مثال: "blog"
body.replayTo(required): string | null
البريد الإلكتروني للرد عليه.
مثال: "some@email.com"
body.status(required): string
حالة النموذج.
مثال: "sent"
body.formData(required): FormDataType[]
مصفوفة من كائنات بيانات النموذج.
مثال:
[
{
"marker": "name",
"type": "string",
"value": "Jack"
}
]
body.fileQuery: IUploadingQuery
استعلام ملف اختياري لتحميل الملفات.
مثال:
{
"type": "page",
"entity": "editor",
"id": 3787
}
fileQuery.type(required): string
النوع، يحدد اسم المجلد في التخزين.
مثال: "page"
fileQuery.entity(required): string
اسم الكيان الذي يتم تحميل الملف منه، يحدد اسم المجلد في التخزين.
مثال: "editor"
fileQuery.id(required): number
معرف الكائن الذي يتم تحميل الملف منه، يحدد اسم المجلد في التخزين.
مثال: 3787
fileQuery.width: number
معامل العرض.
مثال: 0
fileQuery.height: number
معامل الارتفاع.
مثال: 0
fileQuery.compress: boolean
علامة التحسين (الضغط) للصور.
مثال: true
langCode: string
رمز اللغة. الافتراضي: "en_US"
مثال: "en_US"
أمثلة
مثال بسيط
const body = { "formIdentifier": "contact_us", "formModuleConfigId": 2, "moduleEntityIdentifier": "blog", "replayTo": null, "status": "sent", "formData": [ { "marker": "last_name", "type": "string", "value": "Andrey" } ]};
const response = await FormData.postFormsData(body);
مثال مع نوع بسيط من الخصائص "string"، "number"، "float"
const body = { "formIdentifier": "test-form", "formModuleConfigId": 2, "moduleEntityIdentifier": "blog", "replayTo": null, "status": "sent", "formData": [ { "marker": "string_marker", "type": "string", "value": "Username" }, { "marker": "number_marker", "type": "number", "value": 1 }, { "marker": "float_marker", "type": "float", "value": 2.256 } ]};
const response = await FormData.postFormsData(body);
مثال مع نوع بسيط من الخصائص "date"، "dateTime"، "time"
const body = { "formIdentifier": "contact_us", "formModuleConfigId": 2, "moduleEntityIdentifier": "blog", "replayTo": null, "status": "sent", "formData": [ { "marker": "date_marker", "type": "date", "value": { "fullDate": "2024-05-07T21:02:00.000Z", "formattedValue": "08-05-2024 00:02", "formatString": "DD-MM-YYYY HH:mm" } } ]};
const response = await FormData.postFormsData(body);
مثال مع نوع بسيط من الخصائص "text" (يمكن تقديم واحدة فقط من htmlValue أو plainValue أو mdValue)
const body = { "formIdentifier": "contact_us", "formModuleConfigId": 2, "moduleEntityIdentifier": "blog", "replayTo": null, "status": "sent", "formData": [ { "marker": "about_marker", "type": "text", "value": [ { "htmlValue": "<p>Hello world</p>", "params": { "isImageCompressed": true, "editorMode": "html" } } ] } ]};
const response = await FormData.postFormsData(body);
مثال مع نوع بسيط من الخصائص "textWithHeader" (يمكن تقديم واحدة فقط من htmlValue أو plainValue أو mdValue)
const body = { "formIdentifier": "contact_us", "formModuleConfigId": 2, "moduleEntityIdentifier": "blog", "replayTo": null, "status": "sent", "formData": [ { marker: "textwithheader_marker", type: "textWithHeader", value: [ { "header": "Headline", "htmlValue": "<p>Hello World</p>", "params": { "isImageCompressed": true, "editorMode": "html" } } ] } ]};
const response = await FormData.postFormsData(body);
مثال مع نوع خاصية "image"
const testImageUrl = 'https://your-project.oneentry.cloud/cloud-static/files/project/product/2954/image/7e0a6a70-a23d-410f-8b6a-f8b4f7483244.png';const filename = 'test-image.png';
/* في سيناريو العالم الحقيقي، يجب عليك استخدام واجهة برمجة التطبيقات للملفات لإنشاء ملف من عنوان URL، ولكن من أجل البساطة، سنستخدم عنوان URL للملف المحدد مسبقًا ونستخدم طريقة createFileFromUrl لهذا المثال */const file = await FileUploading.createFileFromUrl(testImageUrl, filename);
const body = { "formIdentifier": "contact_us", "formModuleConfigId": 2, "moduleEntityIdentifier": "blog", "replayTo": null, "status": "sent", "formData": [ { marker: "image_marker", type: "image", value: [ file ] } ]};
const response = await FormData.postFormsData(body);
مثال مع نوع خاصية "groupOfImages"
const testImageUrl = 'https://your-project.oneentry.cloud/cloud-static/files/project/product/2954/image/7e0a6a70-a23d-410f-8b6a-f8b4f7483244.png';const filename = 'test-image.png';
/* في سيناريو العالم الحقيقي، يجب عليك استخدام واجهة برمجة التطبيقات للملفات لإنشاء ملف من عنوان URL، ولكن من أجل البساطة، سنستخدم عنوان URL للملف المحدد مسبقًا ونستخدم طريقة createFileFromUrl لهذا المثال */const file = await FileUploading.createFileFromUrl(testImageUrl, filename);
const body = { "formIdentifier": "contact_us", "formModuleConfigId": 2, "moduleEntityIdentifier": "blog", "replayTo": null, "status": "sent", "formData": [ { marker: "groupofimages_marker", type: "groupOfImages", value: [ file ] } ]};
const response = await FormData.postFormsData(body);
مثال مع نوع خاصية "files"
const testImageUrl = 'https://your-project.oneentry.cloud/cloud-static/files/project/product/2954/image/7e0a6a70-a23d-410f-8b6a-f8b4f7483244.png';const filename = 'test-image.png';
/* في سيناريو العالم الحقيقي، يجب عليك استخدام واجهة برمجة التطبيقات للملفات لإنشاء ملف من عنوان URL، ولكن من أجل البساطة، سنستخدم عنوان URL للملف المحدد مسبقًا ونستخدم طريقة createFileFromUrl لهذا المثال */const file = await FileUploading.createFileFromUrl(testImageUrl, filename);
const body = { "formIdentifier": "contact_us", "formModuleConfigId": 2, "moduleEntityIdentifier": "blog", "replayTo": null, "status": "sent", "formData": [ { "marker": "picture_marker", "type": "file", "value": [ { "filename": "files/project/page/10/image/Screenshot-from-2024-05-02-15-23-14.png", "downloadLink": "http://my-site.com/cloud-static/files/project/page/10/image/Screenshot-from-2024-05-02-15-23-14.png", "size": 392585 } ] } ]};
const response = await FormData.postFormsData(body);
مثال مع نوع خاصية "radioButton" أو "list"
const body = { "formIdentifier": "contact_us", "formModuleConfigId": 2, "moduleEntityIdentifier": "blog", "replayTo": null, "status": "sent", "formData": [ { "marker": "selector_marker", "type": "list", "value": [ { "marker": "list", "type": "list", "value": ["1"] } ] } ]};
const response = await FormData.postFormsData(body);
مثال مع نوع خاصية "entity" (قائمة متداخلة)
const body = { "formIdentifier": "contact_us", "formModuleConfigId": 2, "moduleEntityIdentifier": "blog", "replayTo": null, "status": "sent", "formData": [ { "marker": "entity_marker", "type": "entity", "value": [25, 32, 24] } ]};
const response = await FormData.postFormsData(body);
القيمة - معرفات عددية للصفحات ومعرفات نصية للمنتجات. يجب أن تتضمن معرفات المنتجات البادئة 'p-'، على سبيل المثال، 'p-1-'، 'p-2-'، إلخ. p-[parentId]-[productId]
مثال مع نوع خاصية "timeInterval"
const body = { "formIdentifier": "contact_us", "formModuleConfigId": 2, "moduleEntityIdentifier": "blog", "replayTo": null, "status": "sent", "formData": [ { marker: 'timeinterval_marker', type: 'timeInterval', value: [ [ "2025-02-11T16:00:00.000Z", "2025-02-13T16:00:00.000Z" ] ] }, ]};
const response = await FormData.postFormsData(body);
القيمة — مصفوفة من مصفوفات الفترات الزمنية بتنسيق ISO 8601. على سبيل المثال 2025-02-11T16:00:00:000Z
2025 — السنة؛ 02 — الشهر؛ 11 — يوم الشهر؛ T — الفاصل بين التاريخ والوقت؛ 16:00:00 — الوقت بتنسيق الساعات:الدقائق:الثواني؛ 000Z — الميلي ثانية وإشارة المنطقة الزمنية. Z تعني أن الوقت محدد بتنسيق UTC.
مثال على الاستجابة:
{
"formData": {
"formIdentifier": "test-form",
"time": "2026-04-15T14:20:00.731Z",
"formData": [
{
"marker": "name",
"type": "string",
"value": "Test"
}
],
"userIdentifier": "test@test.ru",
"entityIdentifier": "blog",
"fingerprint": "UQ_mo04zghpfp7i0o0li6c88sb4b4nlqu",
"isUserAdmin": false,
"formModuleId": 2,
"parentId": null,
"id": 5811
},
"actionMessage": ""
}
مخطط الاستجابة
المخطط: IPostFormResponse
formData: object
بيانات النموذج.
مثال:
{
"id": 42,
"formIdentifier": "contact_form",
"time": "2023-10-01T12:00:00Z",
"entityIdentifier": "blog",
"isUserAdmin": false,
"formModuleId": 2,
"parentId": null,
"userIdentifier": null,
"formData": [
{
"marker": "name",
"type": "string",
"value": "Jack"
}
]
}
formData.id: number
المعرف الفريد لصفحة النموذج.
مثال: 12345
formData.formIdentifier: string
معرف النموذج.
مثال: "contact_form"
formData.time: string
وقت تقديم النموذج.
مثال: "2023-10-01T12:00:00Z"
formData.entityIdentifier: string
معرف الكيان.
مثال: "blog"
formData.isUserAdmin: boolean
هل المستخدم إداري.
مثال: false
formData.formModuleId: number
معرف وحدة النموذج.
مثال: 2
formData.userIdentifier: string | null
معرف المستخدم.
مثال: null
formData.parentId: number | null
معرف الوالد.
مثال: null
formData.formData: FormDataType[]
بيانات حقول النموذج.
مثال:
[
{
"marker": "name",
"type": "string",
"value": "Jack"
}
]
actionMessage: string
رسالة الإجراء لبيانات النموذج (يمكن أن تكون محلية).
مثال: "تم تقديم النموذج بنجاح"