مادایکس

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
مادایکس
MODx CMS logo.svg
توسعه‌دهنده(ها) تیم مادایکس
انتشار پایدار ۲.۲.۲ پی ال / ۰۲ مه ۲۰۱۲؛ ۹۰۷ روز پیش
نوشته‌شده به پی‌اچ‌پی
سیستم‌عامل چندسکویی
گونه سیستم مدیریت محتوا
پروانه جی‌پی‌ال
وب‌گاه modx.com

مادایکس (MODx) یک سیستم مدیریت محتوا و چارچوب نرم‌افزاری تحت وب متن باز و آزاد جهت نشر اطلاعات در وب و اینترانت است. مادایکس تحت پروانه جی‌پی‌ال توسط زبان برنامه‌نویسی پی‌اچ‌پی و با استفاده از پایگاه داده مای‌اس‌کیوال ایجاد شده است. این سیستم در سال ۲۰۰۷ برنده جایزه متعهدترین سیستم مدیریت محتوای متن باز از سوی موسسه پکت گردید[۱].

تاریخچه[ویرایش]

Raymond Irving و Ryan Thrash پروژه MODx CMS را در سال ٢٠٠٤ با توسعه افزونه DocVars برای Etomite آغاز کردند. در مارس ٢٠٠٥ همه ارجاعات به "MODx" از انجمنهای گفتگوی Etomite حذف گردید. این اقدام در راستای درخواست بنیانگذار Etomite جهت توقف پشتیبانی از مادایکس صورت گرفت. با این کار، مادایکس تبدیل به انشعابی از Etomite شد.

در مه ٢٠٠٥ انجمنهای گفتگوی مادایکس راه اندازی شد و Jason Coward به تیم مدیریتی پیوست. در سال ٢٠٠٧ Raymond بصورت دوستانه از پروژه جدا شد و در سالهای بعد Shaun McCormick نیز به عضویت تیم مدیریتی در آمد.

در سال ٢٠٠٨ کاربران مادایکس، نماد جدیدی برای این پروژه طراحی کردند.

ویژگی‌ها[ویرایش]

مادایکس امکان جداسازی کامل محتوا (اچ‌تی‌ام‌ال خام)، ظاهر و شمایل (استانداردهای سازگار با سی اس اس و جاوااسکریپت) و منطق (پی‌اچ‌پی، اسنیپت) را می دهد.

همچنین قابلیتهای دیگر شامل:

نسخه‌های مادایکس[ویرایش]

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

مادایکس Evolution[ویرایش]

این نسخه همانطور که بیان شد نتیجه تکمیل و توسعه نسخه اولیه مادایکس است. از خصوصیات این نسخه می‌توان به موارد زیر اشاره کرد:

  • سازگاری به نسخه‌های ۴.۳.۱۱ و بالاتر پی‌اچ‌پی.
  • افزونه‌ها، منابع و کاربران خبره فراوان.
  • سادگی در منطق هسته آن جهت یادگیری و توسعه.
  • بخش مدیریت غیراستاندارد.
  • سهولت در یادگیری.
  • محدودیت ایجاد صفحات تا در حدود ۵۰۰۰ صفحه.

Evolution نسخه اصیل مادایکس است و از روش غیرپیچیده‌ای برای کدنویسی هسته آن استفاده شده و بنابراین یادگیری و توسعه آن ساده است. این نسخه بالطبع کاربران بسیار زیادی دارد و با توجه به انجمن‌های گفتگو و رفع اشکال مادایکس، نگرانی‌ای از بابت محل مطرح کردن مشکلات و سوالات وجود ندارد.

قالب[ویرایش]

قالبها در مادایکس کدهای اچ‌تی‌ام‌ال هستند که با تگهای خاصی به افزونه‌های منطقی متصل می‌شوند. نمونه یک قالب در مادایکس 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 با هدف اصلاح نقایص نسخه Evolution پایه‌ریزی شد به اضافه امکانات جدیدی که ایجاد آنها در نسخه قبلی مشکل یا غیرممکن بود.

Jason Coward به عنوان برنامه نویس اصلی Revolution و طراح کتابخانه پی‌اچ‌پی با نام xPDO[۲] پیشنهاد نگارش نسخه جدید با استفاده از این کتابخانه را داد تا Revolution ساختار یک فریم‌ورک کامل برای پروژه‌ها را دارا باشد. Revolution بصورت یک CMS/CMF[۳]، هم به عنوان یک سیستم مدیریت محتوا با امکانات کامل و مثال‌زدنی عمل می کند و هم به عنوان یک فریم‌ورک قدرتمند.

از مشخصه‌های اصلی نسخه Revolution نکات زیر مورد توجه بیشتری هستند:

  • طراحی بخش مدیریت بصورت استاندارد از طریق اسمارتی و ExtJS.
  • نیاز به افزونه‌ی PDO[۴].
  • سازگاری با نسخه‌های ۵.۱.۱ و بالاتر پی‌اچ‌پی.
  • طراحی براساس الگوی مدل-نما-کنترل‌گر.
  • قابلیت تغییر در فیلدهای ورودی بخش مدیریت (این امکان در نسخه Evolution توسط افزونه‌ی ManagerManager انجام می‌گیرد).
  • قابلیت توسعه تگ‌های مادایکس در هسته (این امکان در نسخه Evolution توسط افزونه PHx صورت می‌گیرد).
  • امکان افزودن/تغییر/حذف در منوی بخش مدیریت.
  • نصب و بروزرسانی افزونه‌ها بصورت از راه دور در بخش مدیریت.
  • اضافه شدن مفهوم Context. این امکان، قابلیتی مشابه فضای نام در زبانهای برنامه‌نویسی را برای صفحات ایجاد می‎کند. به این صورت که می‌توان چندین وبگاه را در یک محیط مدیریت کرد بدون هیچگونه تداخلی در طراحی و خروجی.
  • قابلیت استفاده از کدهای بخش مدیریت یا هسته یا پایگاه داده بصورت از راه دور.
  • کارایی بالا در حجم بالای پردازشی و ترافیکی.
  • تغییر در سیستم ذخیره موقتی اطلاعات و رفع محدودیت تعداد صفحات در Evolution.
  • امکان افزودن/تغییر/حذف رویدادها و تنظیمات سایت.
  • بازنویسی و تغییر در سطوح دسترسی کاربران.

قالب[ویرایش]

تگهای مادایکس در 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 با ٣٠٥٢ رأی بودند.

منابع[ویرایش]

  • مشارکت‌کنندگان ویکی‌پدیا، «MODx»، ویکی‌پدیای انگلیسی، دانشنامهٔ آزاد (بازیابی در ۱ اکتبر ۲۰۱۰).

منابع قابل مطالعه[ویرایش]

پیوند به بیرون[ویرایش]