ناشناخته و قدیمی اما قدرتمند و کم‌نظیر
MODX بهترین سیستم مدیریت محتوایی که تا به‌حال از آن استفاده نکرده‌اید
MODX یک سیستم مدیریت محتوا (CMS) است که اولین بار در سال 2005 معرفی شد. گروه توسعه‌دهنده آن با هدف آزادی بیشتر در طراحی و حفظ امنیت بیشتر نسبت به سایر CMSهای موجود آن زمان MODX را ایجاد کردند. در بخش مدیریت MODX شما به کتابخانه‎های داخلی که شامل اکثر ابزارهایی است که هر توسعه‌دهنده‎ای برای انجام وظایف معمول به آن نیاز دارد، دسترسی خواهید داشت. امکان ساخت پلاگین و اسکریپت‎های اختصاصی نيز به‌راحتی میسر است. بدون شک این سامانه مدیریت محتوا، شما را متقاعد می‎سازد از آن استفاده کنید.

این مطلب یکی از مقالات پرونده ویژه «سامانه‌های مدیریت محتوا» شماره 199 ماهنامه شبکه است. علاقه‌مندان می‌توانند کل این پرونده ویژه را از روی سایت شبکه دانلود کنند.


تا به حال نام MDOX به گوشتان نخورده است؟ 

اگر تا قبل از این هرگز چیزی درباره MODX نشنیده بودید، فعلاً همین‎قدر بدانید این یک موتور قدرتمند و کارآمد قدیمی‎ است که اغلب با جوملا و دروپال مقايسه می‎شود. بعضی حتی آن را با وردپرس مقايسه می‎کنند، اما نه مانند سیبی که از وسط دو نصف شده باشد. وردپرس یک ابزار حاضر و آماده است که توسط افراد غیرفنی استفاده می‎شود. در واقع، می‌توان MODX را این گونه توصیف کرد: «بهترین سیستم مدیریت محتوایی كه شما هرگز از آن استفاده نکرده‎اید.» در حالت کلی ما MODX را یک فریم‌ورک مخصوص توسعه‌دهندگان   می‎دانیم که پروژه‎های خود را با آن می‎سازند، نه یک ابزار آماده برای ساخت وب‎سایت. MODX برای کاربرانی که مهارتی در زمینه PHP یا HTML ندارند، انتخاب مناسبی نیست. شاید بتوان MODX را به‌عنوان یک CMF یا فریم‌ورک مدیریت محتوا معرفی کرد. 

بررسی دقیق‎تر 

  MODX مثل خیلی از فریم‌ورک‎های معروف توسط PHP ساخته شده است و می‎توان آن را روی سرورهای معروف مثل Apache، IIS, Lighttpd و nginx اجرا کرد. پایگاه داده مورد استفاده آن نیز MySQL و از xPDO به‌عنوان ORB (سرنام Object-Relational Bridge) استفاده می‎کند. xPDO مستقیم در PDO ساخته شده است و از یک سبک الگوی رکورد فعال برای دسترسی به پایگاه داده استفاده می‎کند. برای مثال می‎توان آن را با Doctrine یا Propel مقايسه کرد. بخش مدیریت با قالب‎های ExtJS، Smarty و API خود MODX ساخته شده است. بخش ویرایشی مدیریت، داشبوردها، منوها و سایر ویژگی‎ها نیز مستقیم داخل رابط کاربری ساخته شده‎اند. در بخش مدیریت شما کنترل کاملی روی چیزهایی که می‎خواهید کاربران به آن دسترسی داشته باشند خواهید داشت. امنیت یکی از برجسته‎ترین قابلیت‎های MODX است که طرف‌داران از آن تعریف می‎کنند، هرچند درک کامل آن به مهارت‎های قابل توجهی نیاز دارد.

آموزش و مستندسازی

MODX با کتاب‎ها، ویدئوها و انجمن‎های مربوط به‌خوبی مستندسازی شده است. جالب اینجا است که خود این انجمن‎ها نیز توسط MODX ساخته شده‎اند و مطالب ارسالی در آن‌ها قدمت 10 ساله دارد. MODX یک کانال Slack فعال نیز دارد که اعضای آن همیشه در دسترس هستند و به‌سرعت به سؤالات شما پاسخ می‎دهند.

نصب

در حال حاضر MODX را تنها می‎توان از طریق دانلود فایل ZIP و باز کردن آن روی فولدر وب شما نصب کرد. (شکل 1)


شکل 1

برای به‎روزرسانی‎ها هیچ به‎روزرسان خودکاری برای بخش اصلی این محصول وجود ندارد. اما بخشی اضافی وجود دارد که کار به‎روزرسانی را به‌راحتی برای شما انجام می‎دهد. تمام اجزای فرعی دیگر را نیز می‎توان از قسمت مدیریت به‎روزرسانی کرد. این پروژه روی GitHub قرار دارد که همیشه شامل آخرین اسنپ‌شات‎های این پروژه است. شما از این طریق هم می‎توانید MODX را نصب کنید، اما دانلود آن از طریق وب‎سایت اصلی بهتر و معقولانه‎تر است.

چرا این محصول توصیه می‎شود؟ 

MODX چیزی فراتر از یک سیستم مدیریت محتوای قدرتمند است. بعد از نصب، شما یک قالب خالی خواهید داشت که می‎توانید طراحی خود را با آن آغاز کنید. صدها گزینه قابل تنظیم برای تغییر طرح شما در اختیارتان قرار دارد. در MODX خبری از ویزارد، درگ کردن، تولیدکننده منو، تنظیمات قالب، ساختار سلسله مراتبی سیستم فایل عجیب و غریب یا عملگرهای جادویی برای انجام همه کارها وجود ندارد.
اگر شما هم به‌دنبال نوعی سیستم مدیریت محتوا هستید که بتواند کار کدنویسی دستی سایت را برای شما انجام دهد، این CMS کار شما را بدون نیاز به یادگیری و دستکاری ساختارهای پیچیده قالب‎ها ساده می‎کند. بعد از اینکه MODX را نصب می‎کنید، کدهای HTML  خود را در یک قالب پایه پیست می‎کنید و کار تمام می‎شود. در واقع اگر شما عادت به کدنویسی دستی دارید، احتمالاً MODX بهترین CMS برای شما است. وقتی می‎خواهید وب‎سایت‎های چندزبانه و چندکاربردی با محتوای مستقل و سفارشی برای مشتريان خود ایجاد کنید، باید به سراغ MODX برويد. این سیستم مدیریت محتوا تقريباً هر وظیفه‎ای که شما بخواهید انجام می‎دهد. برای هر کار مشخصی که باید انجام دهید، به طور معمول چندین روش وجود دارد. از ساده تا پیچیده MODX همه آن را انجام می‎دهد. از آن برای ساخت API، انجمن، وبلاگ، سایت‎های تجاری، صفحات تبلیغاتی و سایت‎های چندرسانه‎ای استفاده می‎شود. MODX می‎تواند زبان‎های مختلف، مجوزهای امنیتی پیشرفته و سفارشی‌سازی مدیریت ورود کاربران را اداره کند.

ساخت یک صفحه وب 

MODX از اجزا و عناصر جداگانه برای سرهم کردن یک صفحه وب استفاده می‎کند. اجزایی به‌نام Templates, Snippets, Chunks,Template Variables و قالب‎های اختصاصی که همگی Elements نامیده می‎شوند. (شکل 2) شما می‎توانید از داخل این قالب‎ها هر سیستم داده‎ای (مثل داده لاگین کاربر، داده صفحه جاری، متادیتا، تنظیمات سیستمی‎، متغیرهای قالب و نظاير آن) را با استفاده از تگ‎ها به دست آورید.


شکل 2

چرخه کار MODX شامل کدنویسی قالب‎های HTML است و HTML قابل استفاده مجدد را در بخشی به‌نام Chunks و عناصر PHP قابل استفاده مجدد را در بخشی به‌نام Snippets نگهداری می‎کند. شما می‎توانید تمام فیلدهای سفارشی مورد نیاز برای این قالب را نیز تنظیم کنید. سپس شما یک Resource را ایجاد و آن را به قالب الصاق می‎کنید.
یک Resource یا منبع یک اصطلاح پایه در نقطه پایانی است، این همان چیزی است که در URL دیده می‎شود. شما می‎توانید این منابع صفحه را نام‎گذاری کنید، اما موارد استفاده از آن‌ها خیلی بیشتر از این‌ها است. می‎توانید نوع محتوای یک Resource را چیزی غیر از HTML، مثل PDF یا داده باینری تعریف کنید. هر Resource می‎تواند اشاره به یک فایل یا لینک خارج از صفحه داشته باشد و یا به‌عنوان یک لینک نمادین با سایر محتوای موجود در سایت استفاده شود. یک Template یا قالب چهارچوب اطراف منابع شما را که نمایش داده می‎شود تشکیل می‎دهد. تمام منابع به یک قالب اختصاص داده می‎شوند. یک Chunk محتوای HTML یا جاوا اسکریپت قابل استفاده مجدد یا هرچیزی غیر از PHP است.
Snippet می‎تواند شامل PHP باشد. این‌ها به هسته MODX و تمام اشیا آن دسترسی دارند. یک Snippet می‎تواند یک Chunk را فراخوانی کند و برعکس آن نیز صادق است. الگوها هم می‎توانند هر دو را فراخوانی کنند. یک Template Variable می‎تواند هر نوع داده سفارشی باشد که یک قالب ممکن است به آن نیاز داشته باشد. برای مثال، عادی است یک تلویزیون به‌عنوان یک عکس سفارشی به یک صفحه تبلیغاتی اختصاص داده شود، اما هر Resource می‎تواند یک عکس متفاوت را برای نمایش توسط قالب در نظر بگیرد. این‌ها شبیه به Custom field در وردپرس هستند، اما توانایی آن‌ها بیشتر است. شما با استفاده از بخش Categories می‎توانید این عناصر را سازماندهی کنید.

نگاهی اجمالی به بخش مدیریت 

بخش مدیریت توسط ExtJS ساخته شده است، به همین دلیل می‎توانید از امکانات کشیدن و انداختن، سفارشی‌سازی فرم، جداول پویا، منوهای راست کلیک وغیره استفاده کنید. می‎توانید از منابع راست کلیک برای گزینه‎های مختلفی مثل ویرایش سریع استفاده کنید که به شما اجازه می‎دهد منابع را در کادرهای شناور اصلاح کنید. یک قابلیت کاربردی دیگر مدیریت رسانه است که توسط آن می‎توانید منابع چندرسانه‎ای خود را راه‌اندازی و با امنیت کلی آن‌ها را کنترل کنید. درنهایت می‎توانید با لاگین کردن کاربران تنها فولدرهای خاصی را در اختیار آن‌ها قرار دهید. (شکل 3)


شکل 3

مطلب پیشنهادی

این تکنیک به شما در ساخت فیدهای RSS سایت‌ها کمک می‌کند

زمینه‎ها

(شکل 4) Context بخشی از متن و محتوا است که بازدیدکنندگان زمانی که وارد سایت می‎شوند مشاهده خواهند کرد. وقتی شما وارد بخش مدیریت می‎شوید، در واقع به بخشی از زمینه Mgr وارد شده‎اید. زمینه‎های مختلف می‎توانند منابع، مجوز دسترسی و زبان کاملاً متفاوتی داشته باشند. می‎توان هر کانتکست را یک وب‎سایت کاملاً متفاوت در نظر گرفت. یک نوع استفاده رایج از کانتکست ساخت نوعی وب‎سایت «ویژه اعضا» در وب‎سایت اصلی برای کاربران تأیید صلاحیت شده است. تمام کاری که باید انجام دهید این است که به کاربران مهمان اجازه ندهيد به این کانتکست دسترسی داشته باشند. در حالت کلی، از کانتکست برای جداسازی نواحی مختلف سایت استفاده می‎شود. بعضی هم از آن برای تبدیل محتوا به زبان‎های مختلف استفاده می‎کنند. این یکی از قابلیت‎های قدرتمند و نسبتاً پنهان MODX است که خیلی از توسعه‌دهندگان توجهی به آن نمی‎کنند.


شکل 4

قالب‎ها و تگ‎ها

MODX یک سیستم برچسب قالب داخلی دارد. هر برچسب با دو براکت شروع و خاتمه پیدا می‎کنند [[ ... ]]
در هر برچسب یک کاراکتر نشان‌دهنده این است که در حال فراخوانی یک Chunk یا منبع یا تنظیمات سیستمی‎ وغیره هستید:
[[*...]]: یک ستاره فیلدهای منبع را بازمی‎گرداند. به‌وسیله آن داده‎های مشخصی از منبع جاری از قبیل عنوان صفحه یا حتی منابع اصلی مشخص می‎شوند.
[[++...]]: برای پیدا کردن تنظیمات سیستمی‎ از قبیل site_url یا تنظیمات سفارشی که شما ایجاد کرده‎اید، مثل company_phone1 استفاده می‎شود.
[[+...]]: این یک placeholder است.
[[~##]]: یک URL به منبع توسط ID آن مثل [[~32]] تولید می‎کند.
[[...]] زمانی که از هیچ نمادی استفاده نمی‎شود، یک Snippet فراخوانی می‎شود.
[[%...]]: یک رشته زبان را استخراج می‎کند.
[[-...]]: برای نوشتن کامنت در MODX استفاده می‎شود.
[[!...]]: علامت تعجب به MODX می‎گوید خروجی تگ را ذخيره نکند، آن را با نمادهای قبلی استفاده کنید. اگر شما [[!$SomeChunk]] را فراخوانی کرده باشید، این خروجی به‌جای دریافت از کش، هر بار پردازش می‎شود.

پارامترهای برچسب

برچسب‎ها برای سفارشی‎سازی خروجی خود می‎توانند از پارامتر و فیلتر استفاده کنند. برای مثال می‎توانید به یک URL تولید شده خودکار تعدادی پارامتر مثل این اضافه کنید:

<a href=”[[~17? &section=`food` &sort=`asc`]]”>Here</a>

همان طور که مشاهده می‎کنید ساختار دستوری استفاده از پارامترها شبیه به رشته کوئری‎های عادی URL است. علامت سؤال به‌معنای شروع فهرستی از پارامترها است و هر پارامتر با & شروع می‎شود و این مقدار در براکت‎ها قرار می‎گیرد.
خروجی کد بالا به این صورت خواهد بود:

<a href=”yourpage?section=food&sort=asc”>Here</a>

یک Snippet وقتی به همین شیوه فراخوانی می‎شود، می‎تواند داده بیشتری را دریافت کند:

[[!MyCustomSnippet? &input=`something tasty`]]

اینجا یک Snippet با نام MyCustomSnippet فراخوانی شده است که داده اضافی با نام input و مقدار something tasty  به آن اختصاص داده شده است. در PHP شما یک متغیر خودکار به‌نام $input دارید که می‎توانید در این Snippet به آن دسترسی داشته باشید. برچسب‎ها می‎توانند در یکدیگر ادغام شوند. یک نمونه بسیار رایج به این شكل است:

<a href=”[[~[[*id]]]]”>Link to this page</a>

یک فیلد منبع [[*id]] در تگ لینک [[~#]] ادغام شده است. تگ‎های داخلی قبل از تگ‎های بیرونی پردازش می‎شوند.
یک مورد دیگر زمانی است که شما می‎خواهید یک HTML Chunk را فراخوانی و در بعضی داده‎های دینامیک استخراج شده از یک Snippet پردازش کنید که چیزی شبیه به این است:

[[$AChunk? &data=`[[!GetTheData]]`]]

تگ Chunk مقدار data را به Chunk ارسال می‎کند، اما برای فهميدن اینکه این داده در واقع چیست از یک Snippet استفاده می‎کند.

فیلترهای خروجی 

برچسب‎ها علاوه بر پارامتر چیزهای دیگری هم با عنوان فیلترهای خروجی را قبول می‎کنند. فیلترها قبل از خروجی کد را پردازش می‎کنند. چند فیلتر را می‎توان با هم استفاده کرد. ساده‎ترين مثال در این مورد تغییر یک رشته است.
[[SomeSnippet:ucase]]
فیلتر با یک علامت دو نقطه آغاز می‎شود و باید قبل از پارامترهای شما قرار بگیرد. در زیر چند فیلتر زنجيره‎ای را مشاهده می‎کنید:

[[SomeSnippet:ucase:replace=`this==that`? &param1=`Go big`]]

در اینجا نتیجه Snippet به حروف بزرگ تبدیل می‎شود، سپس یک فیلتر به‌نام replace تمام موارد پیدا شده this را به that تغییر می‎دهد. بعد از این فیلترها نیز پارامترها قرار می‎گیرند که طبق دستورالعمل با علامت سؤال شروع می‎شوند.
انواع مختلفی از فیلترهای پیش‌فرض در MODX گنجانده شده است. جالب‎تر از فیلترهای پیش‌فرض این است که می‎توانید از Snippet به‌عنوان فیلتر استفاده کنید. تمام کاری که باید انجام دهید این است که از نام Snippet خود مثل یک فیلتر استفاده کنید:

[[$CallingChunk:mySnippet]]

هرچه HTML به‌وسیله کد CallingChunk ارسال کرده است، می‎تواند به‌وسیله mySnippet شما دریافت و به PHP اختصاصی شما تغییر پیدا کند. مقدار $CallingChunk نیز به‌وسیله متغیر  $input در PHP شما قابل دسترسی است.
اگر مواردی که به آن‎ها اشاره شد شما را قانع نمی‎کنند، نکات بسیار دیگری نیز وجود دارد که به آن‌ها اشاره نکردیم: سلسله مراتب‎ ساخت‌یافته، اداره محتوای تکراری، دسترسی به پایگاه داده و ساخت جداول سفارشی. شما می‎توانید محتوا را طبقه‌بندی کنید، روابط والد/ فرزند داشته باشید، محتوا را برای مقاصد امنیتی گروه‎بندی کنید و برای اعتبارسنجی داده‎هایی که احتمالاً کاربران وارد می‎کنند، پلاگین ایجاد کنید.
  این قابلیت‎ها به همین جا ختم نمی‎شود. می‎توانید نوع محتوا و داده‎های MIME را ویرایش کنید. وضعیت پسوند صفحه را مشخص کنید (اینکه از HTML استفاده می‎کنید یا خیر) و به‌عنوان منبع رسانه خود از
Amazon S3 استفاده کنید. شما برای بخش ویرایشی سایت خود می‎توانید از text/HTML خام پیش‌فرض یا ویرایشگرهایی مثل TinyMCE, CodeMirror یا ACE استفاده کنید. یک ویرایشگر برای Markdown نیز وجود دارد.

نقاط منفی

اساس کدنویسی در MODX قدیمی‎ است و از استانداردهای مدرن PSR در آن استفاده نشده است و برای پکیج کردن از Composer استفاده نمی‎کند. سومین نسخه از این سکو که MODX 3 نام دارد قرار است به‌سمت مدرن شدن برود. مشکل دوم استفاده از ExtJS است. با وجود اینکه این فریم‌ورک ایده‌آل است، اما مشکل اینجا است که MODX از نسخه قدیمی‎ آن استفاده می‎کند. همچنین، بخش مدیریت در حال حاضر امکان به‎روزرسانی ندارد. به نظر می‎رسد نسخه‎های بعدی بخش مدیریت اصلاً از ExtJS استفاده نخواهد کرد. تنها مشکل دیگری که ممکن است با آن برخورد کنید نوع پیکربندی سرور برای MODX است. در انجمن MODX نیز موضوعی با عنوان میزبان‎های مناسب برای MODX در جریان است که در این مورد شما را راهنمايی می‎کند.

 

برچسب: