مادایکس

تاریخچه

ریموند اروینگ و رایان ترش پروژه MODX CMS را در سال ۲۰۰۴ با توسعه افزونه DocVars برای Etomite آغاز کردند. در مارس ۲۰۰۵ همه ارجاعات به "MODx" از انجمنهای گفتگوی Etomite حذف گردید. این اقدام در راستای درخواست بنیان‌گذار Etomite جهت توقف پشتیبانی از مادایکس صورت گرفت. با این کار، مادایکس تبدیل به انشعابی از Etomite شد.
در مه ۲۰۰۵ انجمنهای گفتگوی مادایکس راه اندازی شد و Jason Coward به تیم مدیریتی پیوست. در سال ۲۰۰۷ Raymond به صورت دوستانه از پروژه جدا شد و در سال‌های بعد Shaun McCormick نیز به عضویت تیم مدیریتی درآمد.
در سال ۲۰۰۸ کاربران مادایکس، نماد جدیدی برای این پروژه طراحی کردند.
در سال ۲۰۱۰ اولین نسخهٔ MODX Revolution به صورت کاملاً از نو کدنویسی شده ارائه شد. در مه ۲۰۱۰ MODX LLC به عنوان شرکت ثبت گردید و اولین همایش رسمی خود MODXpo را در دالاس آمریکا با حمایت مایکروسافت برگزار کرد.
در اکتبر سال ۲۰۱۲ MODX LLC سرویس ابری MODX Cloud را برای سایتهای تحت MODX راه اندازی کرد.
در مارس ۲۰۱۳ سرویس ابری MODX Cloud وارد شراکت با SiphonLabs شد. همچنین پیشنهاد پشتیبانی وردپرس نیز مدنظر قرار گرفت. این همکاری دوامی نیاورد و در جولای ۲۰۱۳ MODX Cloud مجدداً مستقل شد.
در جولای ۲۰۱۳، Mark Hamstra (یکی از توسعه دهندگان شناخته شدهٔ انجمن MODX) سرویس modmore را به عنوان اولین منبع افزونه‌های تجاری MODX راه اندازی کرد.
در نوامبر ۲۰۱۳ دومین همایش رسمی MODXpo در شهر کلن آلمان برگزار شد.
در ژانویه ۲۰۱۴ سیستم MODX به مجموعهٔ بیت‌نامی افزوده شد.
در ژوئیه ۲۰۱۴ نسخهٔ ۲٫۳ MODX به صورت عمومی عرضه شد. این نسخه بیشتری تغییرات و بهبودها را در چندین سال اخیر داشته‌است.
در سپتامبر ۲۰۱۴ modmore میزبان اولینی همایش MODX Weekend را در اوترخت هلند به عهده گرفت.

آینده

نسخهٔ اصلی بعدی MODX ۲.۴ است که با معرفی سیستم مدیریت پیش‌نیازها (Package Dependency System) ارائه خواهد شد. تاریخی برای این عرضه اعلام نشده‌است.
همچنین MODX ۳ نیز برای تغییرات کلی در حال برنامه‌ریزی است و تاریخ ارائهٔ مشخصی ندارد.

نسخه‌های مادایکس

از حدود سه سال پیش به علت محدودیت‌هایی در مادایکس (نسخه 0.9.6)، تیم مادایکس تصمیم به بازنویسی هسته آن جهت رفع نقایص و افزودن قابلیت‌های جدید گرفت. بعد از ارائه چندین نسخه آزمایشی از مادایکس جدید با نام 0.9.7، تصمیم جدیدی اتخاذ شد برای جداسازی این دو هسته. نسخه فعلی آن زمان تکمیل و با نام MODx Evolution معرفی شد و نسخه جدید با نام MODx Revolution.

قالب

قالبها در مادایکس کدهای اچ‌تی‌ام‌ال هستند که با تگ‌های خاصی به افزونه‌های منطقی متصل می‌شوند. نمونه یک قالب در مادایکس Evolution:
<!DOCTYPE><html><head><title>[(site_name)] :: [*pagetitle*]</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><link rel="stylesheet" href="some/path/to/styles.css" /><script type="text/javascript" src="some/path/to/mootootls.js"></script><script type="text/javascript" src="some/path/to/jquery.js"></script><script type="text/javascript" src="some/path/to/any-other.js"></script><style type="text/css">.someClass { margin:10px; }</style></head><body><div class="post"><h1><a href="[~[*id*]~]">[*pagetitle*]</a></h1><div class="content">[*content*]</div><div class="commnets">[!Jot?docid=`[*id*]`!]</div></div><div class="footer">
{{copyright_info}}
</div></body></html>
همانطور که مشاهده می‌کنید محدودیتی در ایجاد قالب کاملاً پویا و استاندارد نیست. تگ‌های استفاده شده در نمونه بالا، قالب را پویا می‌کنند. برای نمونه تگ‌های [*pagetitle*] و [*id*] به ترتیب جایگزین عنوان و شناسهٔ یکتای صفحه‌ای که در حال پردازش است می‌شوند.

کدهای منطقی پردازشی

کدهای منطقی در مادایکس به دو دسته اسنیپت‌ها (Snippet) و پلاگین‌ها (Plugin) تقسیم می‌شوند.

اسنیپت‌ها

نمونه یک اسنیپت در مادایکس Evolution که نام Test را بر روی آن می‌گذاریم و چنین در قالب آن را فراخوانی می‌کنیم:
[[Test?parent=`20`]]
این اسنیپت مقداری را براساس مقدار parent در تگ بالا، از پایگاه داده دریافت و نمایش می‌دهد:
<?php$parent = isset($parent) ? $parent : $modx->documentObject['parent'];$query = $modx->db->query("SELECT COUNT(*)FROM ".$modx->getFullTableName('site_contents')."WHERE parent=$parent AND deleted=0 AND published=1");return $modx->db->getValue($query);?>

پلاگین‌ها

پلاگین‌ها کدهای منطقی هستند که براساس رویدادها عمل می‌کنند. برای نمونه رویدادی در هنگام پردازش صفحه یا ورود کاربر بعد از شناسایی رخ می‌دهند.
نمونه‌ای برای زمان پردازش صفحه و بررسی دسترسی کاربر:
if($modx->Event->name == 'OnWebPageInit') {if(in_array($modx->documentIdentifier , array(10,11,12)) && !isset($_SESSION['isTrusted'])) {$modx->sendForward(1); // Forward to Resource#1 (Home Page)}}

قالب

تگ‌های مادایکس در Revolution دچار تغییر شده‌است. نمونه قالب بالا در Revolution به شکل زیر است:
<!DOCTYPE><html><head><title>[[++site name]] :: [[*pagetitle]]</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><link rel="stylesheet" href="some/path/to/styles.css" /><script type="text/javascript" src="some/path/to/mootootls.js"></script><script type="text/javascript" src="some/path/to/jquery.js"></script><script type="text/javascript" src="some/path/to/any-other.js"></script><style type="text/css">.someClass { margin:10px; }</style></head><body><div class="post"><h1><a href="[[~[[*id]]]">[[*pagetitle]]</a></h1><div class="content">[[*content]]</div><div class="commnets">[[!Quip?thread=`blog-post-[[*id]]`]]</div></div><div class="footer">
[[$copyright_info]]
</div></body></html>

کدهای منطقی پردازشی

همانطور که بیان شد، هسته نسخه Revolution بازنویسی و براساس xPDO تغییر کرده‌است. نویسندگان با فراهم کردن APIهایی اقدام به همسان‌سازی و سازگاری کدهای قدیمی با هسته جدید کرده‌اند ولی شیوه جدید پویاتر، ساده‌تر و قدرتمندتر است.

اسنیپت‌ها

نمونه یک اسنیپت ساده با استفاده از امکانات جدید:
<?php$docid = isset($_POST['docid']) ? $_POST['docid'] : $modx->resourceIdentifier;$parent = $modx->getObject('modDocument', $docid)->get('parent');$document = $modx->newObject('modDocument');$document->set('pagetitle', 'Page Title');$document->set('parent', $parent);$document->set('content', 'This is some content.');$result = $document->save();return $result==true ? 'Success' : 'Failed';?>

پلاگین‌ها

پلاگین‌ها در نسخه جدید مانند Evolution فراخوانی می‌شوند ولی با رویدادهای سفارشی و بیشتر. نمونه یک شمارنده اطلاعات برای کاربران:
if($modx->event->name == 'OnWebLogin') {$modUser = $user; // Plugin parameter$profile = $modUser->getOne('myProfileModel');$profile->set('experiment', $profile->get('experiment')+1);$result = $profile->save();return $result==true ? 'Success' : 'Failed';}

ترجمان و جوامع

مادایکس دارای یک جامعه جهانی از کاربران و توسعه دهندگان است. این جوامع مادایکس را به زبان‌های بومی خود ترجمه کرده‌اند. این ترجمه‌ها عبارتند از: آلزاس، بلغاری، چینی، چکی، دانمارکی، هلندی، فنلاندی، فرانسوی، آلمانی، یونانی، عبری، ایتالیایی، ژاپنی، نروژی، فارسی، فیلیپینی، لهستانی، پرتغالی (برزیلی و اروپایی)، روسی، صربی، اسپانیولی، سوئدی و ترکی. همچنین جوامع فعال دیگری به زبان‌های هندی و انگلیسی دارد.

جایگاه، جوایز و تألیفات

مادایکس در جولای ۲۰۰۷ برندهٔ جایزهٔ متعهدترین سیستم مدیریت محتوای متن باز از سوی مؤسسه پکت گردید.
در ١٤ ژانویه ٢٠٠٨، Linux.com به بررسی مادایکس پرداخت و چنین نتیجه‌گیری کرد: "مادایکس یک سیستم ساده برای استفاده، قابل استانداردسازی، قابل بهینه‌سازی برای موتورهای جستجو، کاربردی و توسعه‌پذیر است".
در ٦ فوریه ٢٠٠٩، در نظرسنجی سایت OpenSourceCMS.com از بین ٧٨ سیستم مدیریت محتوا براساس نظرات کاربران، نسخه 0.9.6.3 مادایکس با ٢٨٨٥ رأی در جایگاه سوم قرار گرفت. رتبه‌های اول و دوم به ترتیب، Jaws با ۳٩٨٥ رأی و CMS Made Simple با ٣٠٥٢ رأی بودند.