Odoo از معماری چندلایه پیروی میکند؛ به این معنا که لایهی نمایش (Presentation)، منطق (Logic) و ذخیرهسازی دادهها (Data Storage) از یکدیگر تفکیک شدهاند. بهطور خاص، Odoo از معماری سهلایه (Three-Tier Architecture) استفاده میکند:
لایهی نمایش ترکیبی از HTML5، JavaScript و CSS است. لایهی منطق بهطور کامل با زبان Python نوشته شده و لایهی داده تنها از PostgreSQL بهعنوان سیستم مدیریت پایگاه داده رابطهای (RDBMS) پشتیبانی میکند.
با توجه به گسترهی عملکرد ماژولی که میخواهید توسعه دهید، برنامهنویسی در Odoo میتواند در هر یک از این لایهها انجام شود. بنابراین، پیش از ادامهی مسیر، اگر با این حوزهها آشنا نیستید، بد نیست مروری بر آنها داشته باشید.
برای دنبالکردن این آموزش، تنها دانش ابتدایی از HTML و سطح متوسطی از زبان Python کافی است.
ماژولهای اودو
هم افزونههای سمت سرور و هم سمت کلاینت در Odoo به ماژولهایی تبدیل میشوند که بهصورت دلخواه در پایگاه داده بارگذاری میگردند. یک ماژول مجموعهای از توابع و دادههاست که با هدفی مشخص طراحی و تولید شدهاند.
ماژولهای Odoo میتوانند منطق جدیدی را به سیستم اضافه کنند یا منطق موجود را گسترش یا تغییر دهند. برای نمونه، یک ماژول میتواند قوانین حسابداری کشور شما را به قابلیتهای عمومی حسابداری Odoo اضافه کند، در حالی که ماژولی دیگر ممکن است قابلیت نمایش بلادرنگ ناوگان اتوبوسهای شهری را فراهم کند.
در Odoo، همهچیز با ماژول آغاز میشود و پایان مییابد.
اصطلاحات کلیدی: توسعهدهندگان ویژگیهای مرتبط با کسبوکار خود را در قالب ماژولهای Odoo گروهبندی میکنند. ماژولهایی که مستقیماً در دسترس کاربر قرار میگیرند، بهعنوان App علامتگذاری میشوند، اما بیشتر ماژولها در واقع App نیستند. ماژولها همچنین با نام افزونه (addon) نیز شناخته میشوند، و دایرکتوریهایی که سرور Odoo آنها را جستوجو میکند، در مسیر addons_path قرار دارند.
اجرای یک ماژول
یک ماژول در Odoo میتواند شامل عناصر مختلفی باشد:
-
نمونههای کسبوکار (Business Objects):
مانند فاکتور فروش، که بهصورت کلاسهای پایتون تعریف میشوند. فیلدهای تعریفشده در این کلاسها بهطور خودکار بهکمک لایهی ORM به ستونهای پایگاه داده نگاشت میشوند. -
نماهای نمونهها (Object Views):
نحوهی نمایش رابط کاربری را تعیین میکنند. -
فایلهای داده (Data Files):
فایلهای XML یا CSV که دادههای مربوط به مدلها را تعریف میکنند، از جمله:- نماها یا گزارشها
- دادههای پیکربندی (قوانین امنیتی، پارامترهای ماژولها)
- دادههای نمایشی (Demo)
- و سایر اطلاعات
-
کنترلرهای وب (Web Controllers):
برای مدیریت درخواستهای ارسالشده از مرورگرهای وب. -
دادههای استاتیک وب:
مانند تصاویر، فایلهای CSS یا JavaScript که در رابط وب یا وبسایت استفاده میشوند.
هیچکدام از این اجزا الزامی نیستند.
برخی ماژولها ممکن است فقط شامل دادههای پیکربندی باشند (مثلاً قوانین حسابداری یک کشور)، در حالیکه برخی دیگر تنها نمونههای کسبوکار را تعریف میکنند.
در این آموزش، ما نمونههای کسبوکار، نماها و فایلهای داده را ایجاد خواهیم کرد.
ساختار یک ماژول
هر ماژول یک پوشه درون یک دایرکتوری است. مسیر دایرکتوری ماژولها از طریق پارامتر addons_path به سرور معرفی میشود.
یک ماژول Odoo از طریق فایل Manifest خود معرفی میشود.
اگر ماژول شامل کدهای پایتون باشد (برای نمونههای کسبوکار)، این کدها بهصورت یک پکیج پایتون سازماندهی میشوند و باید شامل فایل __init__.py برای مدیریت importها باشند.
ساختار سادهشدهی یک ماژول به این صورت است:
module/
├── models/
│ ├── *.py
│ └── __init__.py
├── data/
│ └── *.xml
├── __init__.py
└── __manifest__.py
نسخههای Odoo
Odoo در دو نسخه ارائه میشود:
-
Odoo Community:
متنباز (Open Source) -
Odoo Enterprise:
دارای مجوز و شامل سورس اشتراکی
نسخهی Enterprise در کنار خدماتی مانند پشتیبانی و بهروزرسانی، قابلیتهای اضافهتری نسبت به نسخهی Community ارائه میدهد.
از دیدگاه فنی، این قابلیتها صرفاً ماژولهای جدیدی هستند که بر روی نسخهی Community نصب میشوند.
حالا آمادهای؟ وقت آن رسیده که اپلیکیشن اختصاصی خودت را بنویسی!