مقدمة
عندما تتصفح صفحة منتج في متجر إلكتروني مبني بأودو، النص المُنسق الذي ترى فيه عناوين بخط غليظ، قوائم نقطية، وصور — كل ذلك يعتمد على نوع حقل واحد: حقل Html. هذا الحقل هو المسؤول عن تحويل الكتابة العادية إلى محتوى منسّق يمكن عرضه على الموقع، في القوالب البريدية، وفي تقارير الـ PDF دون الحاجة لأدوات خارجية.
بعكس الحقول النصية العادية التي تخزن نصًا بسيطًا، حقل Html يخزن محتوى غنيًا مع تنسيقات كاملة. لذلك يستخدم أينما يحتاج المستخدمون لكتابة نص منظّم أو منسّق: وصف منتج، قالب بريد إلكتروني، ملاحظة داخلية، أو جزء من صفحة ويب داخل النظام.
في الدليل هذا سنشرح ماهية حقل Html في أودو، كيف يخزن ويُعالج في الـ ORM وقاعدة البيانات، أمثلة عملية من استخدامه في الأعمال، وطريقة إضافته أو تخصيصه سواء عن طريق Odoo Studio أو عبر برمجة بايثون. كما سنعرض الأخطاء المتكررة التي يقع فيها المطورون والمديرون عند التعامل مع هذا الحقل.
ما هو حقل Html في أودو؟
تقنيًا، حقل Html في أودو مخصص لتخزين سلاسل HTML مُنسّقة. في مستوى قاعدة البيانات ينعكس ذلك في عمود من نوع TEXT في PostgreSQL، والقيمة المخزنة عبارة عن سلسلة HTML. أودو يتكفّل بعرض الحقل وتنقيته، لذلك الواجهة تظهر للمستخدم محرر نص منسّق بدلًا من كود HTML خام.
من زاوية المستخدم، يظهر الحقل كمحرر WYSIWYG (ما تراه هو ما تحصل عليه). يمكن تطبيق تنسيقات مثل غليظ ومائل وعناوين وقوائم وروابط وجداول، بل ويمكن إدراج صور داخل الحقل. عندما يُحفظ، تُخزّن النتيجة كسلسلة HTML منظمة في الخلفية.
في نموذج بايثون، يعرّف الحقل بهذه الطريقة (كمثال توضيحي):
مثال التعريف في نموذج بايثون يوضّح كيفية إضافة حقل Html ضمن موديل موجود، مع خواص مثل التسمية وخيارات التنقية (sanitize).
معامل string يحدّد العنوان الظاهر للمستخدم. وخيار sanitize يقرر ما إذا كان أودو سيزيل عناصر HTML الضارة قبل الحفظ — وهذه طبقة أمان مهمة ومفعّلة افتراضيًا.
عند الاستخدام عبر Odoo Studio يظهر الحقل باسم Html أو Rich Text، والحقل الذي يُنشأ يحصل على بادئة x_studio_. أما عند تعريفه عبر بايثون أو APIs فبإمكانك اختيار الاسم التقني بنفسك.
كيف يعمل الحقل
عند تعريف حقل Html، يخلق أودو عمود TEXT في PostgreSQL بلا قيود طولية، مما يجعله مناسبًا للمحتوى الطويل. إطار أودو يتولّى مرحلة التنقية قبل كتابة المحتوى إلى قاعدة البيانات.
التنقية والأمن
أبرز ما يميّز حقل Html هو طبقة التنقية (sanitization). افتراضيًا، يزيل أودو أي وسوم أو سمات قد تُستخدم لهجمات XSS. هذا السلوك يتحكم به مجموعة من خصائص الحقل التي تمنحك تحكّمًا بالتنقية.
- sanitize: إذا كانت True (الافتراضي)، يُطبق أودو عملية التنقية كاملة قبل الحفظ. عيّنها False فقط إذا كنت متأكدًا تمامًا أن المحتوى موثوق بالكامل ويجب الاحتفاظ بالـ HTML الخام.
- sanitize_tags: عند تفعيلها، يزيل أودو الوسوم غير المدرجة في القائمة المسموح بها. تعطيلها يسمح بوسوم عشوائية لكنه يزيد المخاطر الأمنية.
- sanitize_attributes: تتحكّم فيما إذا كانت سمات الوسوم (attributes) ستخضع للتنقية أيضًا.
- sanitize_style: تتحكّم بتنقية خواص CSS داخل السمات المضمنة؛ افتراضيًا بعض خواص CSS المسموح بها تُبقى بينما تُحذف الخواص الخطرة.
- strip_style: عند True تُزال كل سمات النمط inline style تمامًا.
- strip_classes: عند True تُحذف كل صفوف CSS class من المحتوى المخزن.
هذه طبقة التنقية تجعل حقل Html آمنًا للاستخدام كمحتوى يولّده المستخدمون، ولهذا السبب يُستخدم بانتشار في النماذج المتاحة للعملاء والقوالب البريدية داخل أودو.
الخصائص الأساسية للحقل
إلى جانب التنقية، يتشارك حقل Html العديد من خصائص الحقول القياسية في أودو.
- translate: عند تفعيلها، يُمكن ترجمة محتوى الحقل لكل لغة مفعلّة. أودو يخزن نسخ HTML منفصلة لكل لغة نشطة في النظام.
- required: تجعل الحقل إجباريًا. لاحظ أن حقل Html يحتوي على وسوم فارغة أو مسافات قد يبدو غير فارغ في الواجهة، لذلك تحقق من القيم الفعلية عند تطبيق القواعد الإلزامية.
- default: يحدد محتوى HTML افتراضيًا للسجلات الجديدة، مفيد لتهيئة قوالب بريد أو أوصاف منتجات قياسية.
- compute: يربط الحقل بدالة بايثون تُنشئ المحتوى ديناميكيًا؛ مع store=True تُحفظ النتيجة في قاعدة البيانات.
- copy: يحدد ما إذا كان المحتوى ينسخ عند تكرار سجل. القيمة الافتراضية True.
كيفية ظهوره في الواجهات
في نماذج الإدخال يُعرض الحقل كمحرر نص منسّق يتضمن شريط أدوات لتطبيق التنسيقات، بينما في قوائم العرض عادة ما تُعرض معاينة نصية بسيطة بعد إزالة وسوم HTML للحفاظ على مقروئية الصفوف.
سمة widget في ملفات XML تتيح لك تحديد كيفية العرض. الافتراضي هو محرر rich text. يمكنك أيضًا عرض المحتوى كـ HTML ثابت باستخدام وidget 'html' لعرضه بلا شريط أدوات — مفيد في التقارير أو صفحات البورتال.
التفاعل مع ORM في أودو
من ناحية التطوير، قراءة حقل Html ترجع سلسلة تحتوي الوسوم HTML الخام، والكتابة تتوقع سلسلة HTML كذلك. عملية التنقية تحدث في مستوى الـ ORM قبل الكتابة إلى قاعدة البيانات، لذلك حتى القيم المرسلة عبر XML-RPC تُنقّى إذا كان sanitize=True.
تطبيق عملي مهم: إذا أردت تخزين وسوم HTML مخصّصة أو سمات غير مدرجة في القائمة المسموح بها، ستحتاج إلى تعطيل sanitize أو تعديل خيارات التنقية في تعريف الحقل — وهذا يتطلب وعي تام بمخاطر الأمان في بيئة الإنتاج.
حالات استخدام تجارية
أمثلة فعلية من بيئة الأعمال
المخزون والتجارة الإلكترونية: أوصاف المنتجات
أكثر الحقول Html استخدامًا هو وصف المنتج في product.template. هذا الوصف يظهر في متجر الويب وفي سطور أوامر البيع، مما يمكّن فرق التسويق من كتابة محتوى منسّق بقوائم وعناوين وصور يُحسّن تجربة الشراء ويزيد من معدل التحويل. المحتوى الواحد يُستخدم في الواجهة الخلفية والمتجر دون تكرار بيانات.
التسويق عبر البريد الإلكتروني: نصوص القوالب
قوالب البريد في أودو تعتمد على حقول Html لتخزين body_html الذي يتضمن تخطيط الرسالة، الصور، والاختصارات الديناميكية التي تُستبدل عند الإرسال. الفرق التسويقية تصمم رسائل غنية داخل أودو دون الحاجة لأدوات تصميم منفصلة، ويمكن إعادة استخدام المحتوى عبر حملات وعروض تلقائية.
إدارة علاقات العملاء: ملاحظات وصف الفرص
فِرَق المبيعات تحتاج إلى توثيق سياق المكالمات والصفقات. حقول Html في سجلات العملاء والفرص تسمح بتدوين ملاحظات منسقة مع قوائم وروابط لمستندات خارجية، ما يسهل مشاركة المعرفة داخل الفريق أو تضمينها في تقارير مطبوعة بدون فقدان التنسيق.
المحاسبة: بنود وشروط الفواتير
العديد من الشركات تضيف شروط الدفع أو البنود القانونية أسفل الفواتير وأوامر البيع. حقل note في هذه النماذج هو Html ما يسمح لقسم المالية بتنسيق البنود لتظهر بشكل نظيف على تقارير PDF المطبوعة مع الحفاظ على الفواصل والتأكيدات كما أُدخلت.
الموارد البشرية: وصف الوظائف
عند نشر وظائف عبر وحدة التوظيف في أودو، يوضع الوصف في حقل Html داخل hr.job و hr.applicant. هذا يمكّن إعداد صفحات وظائف مهنية بأقسام واضحة للمهام والمؤهلات والمزايا، ما يساعد على جذب المرشحين المناسبين.
إنشاء أو تخصيص حقل Html
طرق إضافة حقل Html
هناك ثلاث طرق رئيسية لإضافة حقل Html في أودو، حسب مستوى المهارة وطريقة النشر.
باستخدام Odoo Studio (من دون كود)
- Odoo Studio يسمح بإضافة الحقل بدون كتابة أي سطر كود.
- افتح Odoo Studio من القائمة الرئيسية.
- انتقل إلى النموذج الذي تريد تعديل واجهته.
- اسحب عنصر Html أو Rich Text من الشريط الجانبي وضعه في النموذج.
- اضبط التسمية والخيارات في لوحة خصائص الحقل.
احفظ وأغلق Studio — سيُنشأ الحقل تلقائيًا ببادئة x_studio_ ويُضاف للنموذج وقاعدة البيانات دون حاجة لخطوات نشر معقدة، ويصبح متاحًا فورًا للإدخال.
باستخدام بايثون في وحدة مخصصة
للمطورين الذين يبنون موديلات مخصصة، يُعرّف الحقل في ملفات بايثون داخل الوحدة. هذا الأسلوب مناسب للتتبع عبر version control والنشر عبر بيئات متعددة.
مثال تعريف حقل Html في موديل موروث يبيّن إمكانيات مثل sanitize وترجمة المحتوى.
بعد تعريف الحقل أضفه إلى ملف عرض XML ليظهر في الواجهة. عند تثبيت أو ترقية الوحدة سينشأ عمود TEXT تلقائيًا في قاعدة البيانات، ويُعرض الحقل كمحرر نص غني في النموذج دون إعداد إضافي.
باستخدام واجهة XML-RPC
إذا كنت تدير التخصيصات برمجيًا كجزء من أنبوب نشر أو سكربت خارجي، يمكنك إنشاء الحقول عبر XML-RPC.
مثال طلب عبر API يوضح كيفية إنشاء تعريف حقل من النوع ttype='html' باستخدام ir.model.fields.
القيمة ttype: 'html' تُخبر أودو بإنشاء حقل Html. إعداد state: 'manual' يشير إلى أنه حقل مُنشأ من المستخدم وليس جزءًا من وحدة مُدمجة — طريقة مفيدة للأتمتة والإعدادات البعيدة المتتبعة في بيئات العملاء.
ملاحظة مهمة: خيارات التنقية مثل sanitize لا تُضبط بنفس السهولة عبر ir.model.fields عبر API كما تفعل عند تعريف الحقل في بايثون؛ لذلك السلوك الافتراضي للتنقية يطبّق عند الإنشاء عبر API.
أفضل الممارسات
1. إبقِ sanitize مفعّلًا إلا لسبب قوي للغاية
آلية التنقية الافتراضية موجودة لحماية النظام من هجمات XSS. في معظم الحالات تعمل التنقية بدون مشاكل. عطلها فقط إذا كان المحتوى مصدره عملية داخلية موثوقة بالكامل، ولا تُفعلها لمدخلات قادمة من مستخدمين خارجيين.
2. فعّل translate=True للمحتوى متعدد اللغات
إذا كان النظام يدعم لغات متعددة، فعّل translate=True على حقول Html التي تظهر على الموقع أو في مستندات التعامل مع العملاء. هذا يضمن أن كل لغة لها محتوى مستقل وتجنب عرض محتوى بلغة خاطئة للزائرين.
3. تجنّب الاعتماد على موارد خارجية داخل الـ HTML
إدراج صور أو سكربتات مستضافة خارجيًا يخلق تبعية يمكن أن تنكسر عندما تتغير الروابط أو تختفي. استخدم نظام المرفقات في أودو لاستضافة الصور داخليًا واربطها بروابط نسبية للحفاظ على استقرار المحتوى عبر ترحيل قواعد البيانات وتغييرات الخادم.
4. استخدم حقول Html المحسوبة للمحتوى الديناميكي
للمحتوى الذي يُبنى برمجيًا — مثل ملخص منسق لأسطر الطلب أو بند ضمان متغير — الحقل المحسوب مع store=True حل مناسب: المنطق مركزي والنتيجة محفوظة للوصول السريع وتظهر بشكل صحيح في الواجهة وتقارير الـ PDF.
5. اختر Html أو Text بمعرفة سياق العرض
إذا كان المحتوى سيُقرأ دائمًا كنص عادي في الخلفية وكان التنسيق غير مهم، فحقل Text أبسط وأفضل. استخدم Html فقط حيث يهم التنسيق — صفحات الويب، مستندات مطبوعة، أو رسائل بريد. إضافة محرر نص غني حيث يكفي Text يعرّض المستخدمين لتعقيد غير ضروري.
الأخطاء الشائعة
أخطاء شائعة
إيقاف التنقية ونسيان ذلك
تعطيل sanitize=False على حقل قابِل للتحرير من قبل المستخدمين يُعرّض النظام لمخاطر أمنية. كثيرًا ما يُفعل هذا أثناء التطوير لتلبية حاجة تنسيقية ثم يُنْسى قبل الإنتاج. وثّق سبب التعطيل وخطّط لمراجعة أمان قبل النشر.
لصق محتوى من مصادر خارجية مع HTML فاسد
عند لصق من مستندات Word أو Google Docs أو صفحات ويب يظهر HTML غير منظم أو علامات غير قياسية، ما يؤدي لعرض غير متسق أو رموز غير مرئية تبطئ التحميل. شجّع المستخدمين على استخدام خيار "اللصق كنص عادي" ثم إعادة التنسيق داخل محرر أودو.
الخَلط بين حقل Html ومحتوى منشئ الموقع
منشئ موقع أودو يبني الصفحات باستخدام مكوّنات بلوك؛ HTML المخزن هناك يختلف عن ما يجب وضعه في حقل Html نموذجي. محاولة نسخ HTML المعقّد من منشئ الموقع إلى حقل نموذج غالبًا ما تفشل أو تُحذف بواسطة المنقّي.
نسيان تفعيل الترجمة في بيئات متعددة اللغات
في بيئة متعددة اللغات، حقل Html بدون translate=True يعرض نفس المحتوى لكل المستخدمين. هذا قد يكون مقبولًا داخليًا لكنه مشكلة لصفحات المنتج أو قوالب البريد التي تصل لعملاء بلغات متنوعة. إصلاح هذا بعد إدخال محتوى بالفعل يكون مضنيًا.
استخدام Html في مواضع تتوقع نصًا عاديًا
الخاتمة
The Html field is one of the most powerful field types in the Odoo data model. It sits quietly behind product descriptions, email templates, job postings, and invoice notes, making formatted content possible throughout the system without any additional tooling.
حقل Html واحد من أقوى أنواع الحقول في نموذج بيانات أودو. هو الركيزة التي تمكّن تنسيق المحتوى عبر أوصاف المنتجات، قوالب البريد، إعلانات الوظائف، وملاحظات الفواتير دون الحاجة لأدوات خارجية.
فهم كيفية عمله، خاصة طبقة التنقية، دعم الترجمة، وسلوك العرض في سياقات مختلفة، يساعدك في اتخاذ قرارات سليمة عند تصميم أو تخصيص بيئة أودو. سواء أضفت الحقل عبر Studio، عرفته في بايثون ضمن وحدة مخصصة، أو أنشأته عن بُعد عبر API، المبادئ نفسها تنطبق.
مثل كثير من ميزات أودو، الفكرة الأساسية للحقل بسيطة بمجرد معرفتك بما يجري تحته. القيمة الحقيقية تأتي من استخدامه في الأماكن المناسبة، بالإعدادات الصحيحة، ونوع المحتوى الملائم. في Dasolo، نقدم دعمًا للشركات لتنفيذ وتخصيص وتحسين أودو عبر الأقسام. تواصل معنا