مقدمة
في Odoo، يُمثل كل نموذج (Model) طريقة تنظيم وتخزين البيانات داخل قاعدة البيانات. أي معلومة تجارية تتعامل معها — صفقة، منتج، صفحة ويب — موجودة داخل سجل لنموذج معين.
فهم نماذج Odoo ضروري للمستشارين الفنيين والبرمجيين على حد سواء. النماذج تشكل العمود الفقري لهندسة البيانات في Odoo: هي التي تحدد الحقول، الروابط بين السجلات، والمنطق التجاري المضمّن.
سنتناول هنا نموذج الموقع (website) تحديدًا. هذا النموذج يدير إعدادات المواقع داخل Odoo، سواء كنت تنشئ مواقع متعددة، تُعيد تصميم الهوية البصرية، أو تُوصل الموقع بأنظمة خارجية.
ما هو نموذج الموقع
نموذج الموقع يمثل إعدادات موقع إلكتروني داخل النظام. يحفظ كل ما يحدد مظهر وسلوك الموقع: اسم النطاق، اللغات المتاحة، عناصر العلامة التجارية، حسابات الشبكات الاجتماعية، وبنية قوائم الموقع.
النموذج جزء من تطبيق Website ويُستخدم في كل موقع تم إنشاؤه داخل Odoo. في بيئات المواقع المتعددة ستجد سجلاً لكل موقع، ولكل سجل نطاقه الخاص، شركته الخاصة، إعدادات لغوية وثيمة منفصلة.
نماذج أخرى في Odoo تربط إلى نموذج الموقع عبر حقل website_id. تستخدم هذه العلاقة لتقييد المحتوى—مثل الصفحات أو المنتجات—بموقع معين، وهي آلية أساسية في العمل مع توريث النماذج وواجهات برمجة تطبيقات Odoo.
الحقول الأساسية في النموذج
فيما يلي الحقول الأهم داخل نموذج الموقع. معرفة هذه الحقول تُسهل ضبط إعدادات الموقع والعمل معها بفعالية.
1. name
نوع: Char. مطلوب. يخزن اسم الموقع كما يظهر في إعدادات الواجهة الخلفية وقوائم التبديل بين المواقع — هو المعرف البسيط الذي يراه المستخدمون الإداريون.
2. sequence
نوع: Integer. الافتراضي 10. يتحكم في ترتيب عرض المواقع عندما يكون هناك أكثر من موقع واحد؛ القيم الأقل تظهر أولًا.
3. domain
نوع: Char. عنوان النطاق الخاص بالموقع (مثلاً https://www.example.com). يضيف Odoo https تلقائيًا إن لم يكن موجودًا، ويجب أن يكون فريدًا لأنّه يُستخدم للتوجيه واعتبارات السيو.
4. company_id
نوع: Many2one (res.company). مطلوب. يربط الموقع بشركة داخل النظام؛ في بيئات متعددة الشركات، كل موقع يعرض بيانات الشركة المرتبطة به فقط.
5. language_ids
نوع: Many2many (res.lang). قائمة اللغات المتاحة على الموقع، والتي يمكن للزائرين التبديل بينها. عادةً تَشمل كل اللغات المثبتة ما لم تُحدد خلاف ذلك.
6. language_count
نوع: Integer. محسوب. عدد اللغات المتاحة؛ يُستخدم لعرض معلومات أو لفرز النتائج في الواجهات.
7. default_lang_id
نوع: Many2one (res.lang). مطلوب. لغة الموقع الافتراضية عند دخول الزائر للمرة الأولى، ويجب أن تكون موجودة ضمن language_ids.
8. auto_redirect_lang
نوع: Boolean. الافتراضي True. عند التفعيل، يعيد الموقع توجيه الزائر إلى نسخته اللغوية بناءً على إعدادات المتصفح إن كانت متاحة.
9. cookies_bar
نوع: Boolean. عند التفعيل يُعرض شريط ملفات تعريف الارتباط للمستخدمين، مفيد للامتثال للقوانين مثل GDPR، ويمكن لـ Odoo توليد صفحة سياسة ملفات تعريف الارتباط تلقائيًا.
10. logo
نوع: Binary. شعار الموقع ويُعرض في الرأس ومناطق أخرى؛ إن لم يُحدد فسيُستخدم شعار Odoo الافتراضي.
11. favicon
نوع: Binary. الأيقونة الصغيرة (favicon) للمتصفح؛ يقوم Odoo بتغيير قياسها إلى 256×256.
12. social_twitter
نوع: Char. رابط حساب تويتر/إكس. يستمد القيمة افتراضيًا من إعدادات الشركة ويُستخدم في التذييل والمشاركة الاجتماعية.
13. social_facebook
نوع: Char. رابط حساب فيسبوك. نمط العمل مماثل لباقي حقول الشبكات الاجتماعية.
14. social_linkedin
نوع: Char. رابط لينكدإن.
15. social_instagram
نوع: Char. رابط إنستغرام.
16. social_youtube
نوع: Char. رابط قناة يوتيوب.
17. social_github
نوع: Char. رابط GitHub.
18. social_tiktok
نوع: Char. رابط TikTok.
19. social_default_image
نوع: Binary. الصورة الافتراضية عند مشاركة روابط الموقع على الشبكات الاجتماعية؛ هذه الصورة تحل محل الشعار عند وجودها وتُستخدم لوسوم Open Graph وTwitter Card.
20. google_analytics_key
نوع: Char. مفتاح Google Analytics لإضافة تتبّع الزوار؛ يقوم Odoo بحقن سكربت التتبع عند ضبطه.
21. google_maps_api_key
نوع: Char. مفتاح واجهة خرائط Google لاستخدام الخرائط وميزات تحديد المواقع.
22. user_id
نوع: Many2one (res.users). مطلوب. يُمثل المستخدم العام للموقع—مستخدم البوابة أو الزائر المجهول—ويأخذ قيمة افتراضية من إعدادات الشركة.
23. cdn_activated
نوع: Boolean. عند التفعيل تُقدّم الأصول الثابتة عبر CDN لتحسين سرعة التحميل.
24. cdn_url
نوع: Char. عنوان القاعدة (base URL) لخدمة CDN المستخدمة عند تفعيل cdn_activated.
25. cdn_filters
نوع: Text. أنماط تعبير نمطي (regex) لعناوين URL التي تُعاد كتابتها لتُخدم من الـ CDN؛ الافتراضي عادةً يشمل المسارات الثابتة.
26. menu_id
نوع: Many2one (website.menu). محسوب. يشير إلى قائمة التنقل الجذرية للموقع.
27. homepage_url
نوع: Char. مسار الصفحة الرئيسية داخل الموقع (مثلاً /contact أو /shop). يجب أن يبدأ بشرطة مائلة (/).
28. custom_code_head
نوع: Html. كود مخصص يُحقن داخل وسم head—مفيد لوضع سكربتات التحليلات أو ميتا تاغات.
29. custom_code_footer
نوع: Html. كود مخصص يُحقن قبل إغلاق وسم body—مناسب لوضع ويدجتات الدردشة أو سكربتات تتبع إضافية.
30. robots_txt
نوع: Html. محتوى مخصص لملف robots.txt للتحكم في وصول محركات البحث والزواحف.
31. theme_id
نوع: Many2one (ir.module.module). الثيمة المثبتة للموقع.
32. auth_signup_uninvited
نوع: Selection. خيارات مثل b2b (بتلقي دعوة) أو b2c (تسجيل مجاني) للتحكم في قدرة الزوار على إنشاء حسابات بدون دعوة.
33. create_date
نوع: Datetime. تاريخ إنشاء السجل، تُديره Odoo تلقائيًا.
34. write_date
نوع: Datetime. تاريخ آخر تعديل على السجل، تُديره Odoo تلقائيًا.
كيف يُستخدم هذا النموذج في سير العمل التجاري
1. مواقع متعددة وتعدد اللغات
الشركات التي تعمل بعدة علامات تجارية أو أسواق تنشئ سجل موقع لكل علامة/منطقة. كل موقع يمكن أن يملك نطاقه الخاص، لائحته من اللغات، ومحتوى مميز. حقل website_id على الصفحات والمدونات والمنتجات يضمن عرض المحتوى المرتبط بالموقع الصحيح.
2. الهوية البصرية والعلامة التجارية
الشعار، favicon، وروابط الشبكات الاجتماعية تُضبط لكل موقع على حدة—وهذا يمكّن فرق التسويق من تحديث الهوية دون التأثير على مواقع أخرى. إضافة صورة مشاركة افتراضية تُحسّن مظهر الروابط عند نشرها على الشبكات.
3. اللغات والسيو
تحديد language_ids وdefault_lang_id يحددان اللغات المتاحة وسلوك التوجيه. تفعيل auto_redirect_lang يرفع من سهولة الاستخدام للزوار الدوليين، كما أن الإعدادات السليمة تخدم احتياجات السيو ووسوم hreflang.
4. الأداء وCDN
مع نمو حركة المرور، تفعيل cdn_activated مع cdn_url ينقل تحميل الأصول الثابتة إلى شبكة تسليم المحتوى، وما تُحدده في cdn_filters يقرر أي الروابط التي يتم إعادة كتابتها.
5. الامتثال والتحليلات
تفعيل cookies_bar يوفّر شريط موافقة ملفات التعقب، بينما google_analytics_key وcustom_code_head يتيحان إضافة أدوات التتبع. أما robots_txt فمهم للتحكم بما يسمح لعناكب البحث بفهرسته.
كيف يُوسّع المطورون هذا النموذج
المطورون يُوسّعون نموذج الموقع باستخدام أنماط عامة ضمن إطار Odoo، حيث يُعدّ توريث النماذج (model inheritance) الآلية الأساسية لذلك.
توريث النماذج
استعمل _inherit = 'website' لتوسيع السلوك والحقول. يمكن إضافة حقول جديدة، تجاوز طرق (methods)، أو إضافة قيود. تبقى تغييراتك في موديل منفصل بما يسهل الحفاظ عليها عند الترقية.
إضافة حقول
عرّف حقولًا جديدة في النموذج الموروث مع اختيار النوع المناسب: Char، Many2one، Boolean، Integer، Text، Selection. فكر في أن تكون بعض الحقول مرتبطة بموقع محدد إذا كانت البيئة متعددة المواقع.
امتدادات بايثون
يمكنك تجاوز دوال مثل create وwrite وunlink لإدخال منطق إضافي، مع استدعاء super() للحفاظ على سلوك الأصل. راعِ الحقول الضرورية مثل user_id وcompany_id عند إنشاء مواقع برمجيًا.
Odoo Studio
يسمح Odoo Studio بإضافة حقول بسرعة وبدون كود، وهو مناسب للتعديلات السريعة. لكن للمنطق المعقّد أو إعدادات متكرّرة عبر واجهات برمجية، يُفضَّل بناء موديول مخصّص للحفاظ على قابلية الصيانة.
ممارسات موصى بها
- حدد دومين لكل موقع في بيئة الإنتاج لأنّه يسهل التوجيه ويحسن السيو.
- تأكد أن default_lang_id موجود ضمن language_ids لأن Odoo يتحقق من ذلك عند التغيير.
- ضع أكواد الطرف الثالث داخل custom_code_head أو custom_code_footer بدلًا من تعديل القوالب الأساسية لتقليل المخاطر عند التحديث.
- عند بناء تكاملات API، استخدم XML-RPC أو JSON-RPC؛ نموذج الموقع متاح عبر الواجهات، وتأكّد من مطابقة website_id عند مزامنة المحتوى.
- لحقول مخصصة، استعمل بادئة
x_أو بادئة خاصة بالموديول لتجنُّب تضارب الأسماء مع إصدارات Odoo المستقبلية.
أخطاء شائعة
- إنشاء نطاقات مكررة يؤدي لخطأ لأن حقل domain يخضع لقايد فريد (unique).
- نسيان ضبط user_id عند إنشاء المواقع عبر API سيسبب فشلًا لأن الحقل مطلوب.
- تعيين homepage_url دون شرطة مائلة في البداية يؤدي إلى خطأ؛ يجب أن يبدأ المسار بـ '/'.
- تفعيل cdn_activated دون وضع cdn_url صالح قد يسبب فشل تحميل الأصول.
- تجاوز دوال جوهرية دون استدعاء super() قد يكسر عمل موديلات أخرى أو يعرقل التحديثات لاحقًا.
خاتمة
نموذج الموقع هو القلب الذي يحكم إعدادات الموقع داخل Odoo؛ يخزّن نطاق الموقع، اللغات، عناصر العلامة التجارية وسلوكيات العرض. فهم الحقول والعلاقات مع النماذج الأخرى يمكّنك من ضبط وتخصيص ودمج مواقع Odoo بكفاءة.
سواء كنت مستشارًا وظيفيًا تُخطط لهياكل مواقع متعددة أو مطورًا يبني موديلات مخصصة، الإلمام الجيد بنموذج الموقع يوفر وقتك ويقلل الأخطاء.
تحتاج مساعدة في تنفيذ Odoo لديك؟
تعمل Dasolo مع الشركات على تنفيذ وتخصيص وتحسين حلول Odoo، مع خبرة خاصة في تكاملات API وتطوير الموديولات وفهم عميق لهندسة بيانات Odoo ونماذج مثل website.
إذا احتجت مساعدة في تنفيذ Odoo، إعداد مواقع متعددة، أو عمليات التكامل، فريقنا جاهز لدعمك. احجز عرضًا تجريبيًا لمناقشة مشروعك.