MODX CMS – система управління контентом, яка була випущена в 2005 році. У 2009 році, вона була представлена під кодовими іменами Evolution і Revolution. Версія Evolution була заснована на оригінальному коді, в той час як Revolution була повністю переписана з нуля. Наша сьогоднішня стаття присвячена здебільшого Revolution.

В консолі управління MODX ви зможете створювати власні плагіни і скрипти, і при цьому мати доступ до асортименту платних додатків.

Більш детальна інформація представлена на головній сторінці сайту MODX і в розділі «Про нас».

Чи знайома вам ця CMS?

MODX – це більше фреймворк для розробників, і вже точно не як готове рішення для любителів «конструкторів». Це не кращий варіант для тих, хто не знає PHP і HTML. Тут немає конструкторів меню або готових модулів, які можна перетягнути в шаблон.

Я б сказав, що MODX – більше CMF (content management framework, «фреймворк для управління контентом»), а не CMS. У ньому можна використовувати API для керування скриптами, без готових шаблонів сторінок і постів.

Копнемо глибше

MODX CMS шаблони розроблені на PHP. Вона працює на всіх популярних серверах, включаючи Apache, IIS, Lighttpd і nginx. Вона використовує MySQL, а в якості ORB (object-relational bridge, «об’єктно-реляційний міст») — xPDO.

Консоль управління в MODX реалізована за допомогою ExtJS, Smarty-шаблони, і власного API. можна самостійно редагувати консоль управління і панелі інструментів.

Власні меню, повний контроль над ACL (списки контролю доступів) – все це у вашому розпорядженні. Але для повноцінної роботи з функціоналом потрібні певні навички і знання.

Платформа MODX підтримується компанією MODX, LLC. У неї є й інші продукти, включаючи хмарний хостинг і консалтингові послуги. Вибираючи MODX, можна бути впевненим у надійності, так як компанія навряд чи раптово зникне або припинить підтримку свого проекту.

Навчання та документація

MODX пропонує відмінну документацію, включаючи відеоролики, книги, а також співтовариство на форумі. Я думаю, вам буде корисно для початку ознайомитися переглянути кілька повчальних відео і пробігтися по документації, щоб хоч трохи вникнути в суть.

Установка

MODX можна встановити лише скачавши ZIP-архів і завантажити його на сервер:

MODX: краща CMS, якої ви ніколи не користувались

Викачуємо MODX

В ядрі даної платформи відсутні автоматичні оновлення. Але є додаток, яке дозволить без праці оновлюватися до свіжих релізів. До речі кажучи, всі доповнення також просто оновлюються через консоль.

Управління проектом відбувається через GitHub, і там завжди можна знайти свіжі скріншоти і релізи проекту. Я рекомендую завантажити саму останню версію платформи і завантажити її на свій сервер.

Чим примітна MODX CMS

MODX CMS Evolution – це щось на зразок движка для просунутих користувачів. З самого початку перед вами буде порожній шаблон, над яким доведеться попрацювати, а також сотня налаштувань і функцій, з допомогою яких можна повністю адаптувати платформу під власні проекти. Тут немає ніяких конструкторів, помічників, drag and drop інтерфейсів, віджетів та інших зручностей.

Якщо вам подобається писати код вручну, MODX вам точно підійде. Ця CMS дозволяє досить швидко навчитися ручної переробки сайтів.

Якщо вам потрібно отримати мультимовну, многосайтовую платформу з роздільним контентом і окремими унікальними панелями управління для клієнтів, то ви точно оціните те, на що здатна MODX.

Її можна використовувати для створення API, форумів, блогів, корпоративних сайтів, сайтів-візиток! Тут може бути кілька мов, розширені налаштування прав доступу та безпеки, а також можливість налаштовувати адміністративні панелі під кожного клієнта.

Створення веб-сторінки

Для формування веб-сторінки в MODX використовується стек елементів. Так звані шаблони, фрагменти, фрагменти коду, змінні шаблону, а також власна система тегів:

MODX: краща CMS, якої ви ніколи не користувались

У шаблонах за допомогою тегів можна використовувати користувальницькі дані, дані про поточній сторінці, метадані, глобальні системні налаштування, змінні, фрагменти коду, фрагменти або заглушки.

Використання MODX передбачає роботу над HTML-шаблону, а також парсинг HTML-коду в готові фрагменти, а PHP-коду — в сніппети. Також в шаблонах можна використовувати будь-які довільні поля. Далі після MODX CMS установки потрібно створити ресурс, прив’язати його до шаблону, заповнити потрібні поля, і на цьому все!

Resource (ресурс) — позначення кінцевої точки. Це те, про що зазначається в URL-адресі. Тип вмісту ресурсу може бути відмінним від HTML (наприклад, PDF або двійкові дані). Можна встановити примусове скачування контенту або ж відображати його прямо в браузері. Ресурс може навіть вести на файл або на сторінку, або перенаправляти відвідувачів на інший контент в межах сайту.

Template (шаблон) — це рамка (фрейм), в якій відображається контент. Всі ресурси прив’язуються до шаблону.

Chunk (фрагмент коду) — це HTML або PHP-коду з можливістю повторного використання.

Snippets (сніппети) використовуються для PHP-коду. У фрагментів є доступ до ядра MODX та до всіх її об’єктів.

Текстові фрагменти можуть запускати фрагменти, і навпаки. Шаблони і ресурси можуть запускати і те і інше. Це чотири основних складових, за допомогою яких можна формувати веб-сторінки.

Plugin (плагіни) здатні розширювати функціонал ядра.

Template Variable (змінна шаблону) — це будь-які довільні дані, які можуть знадобитися усередині шаблону, і для яких можна вказати ресурс. Наприклад, можна використовувати змінну шаблону для довільного зображення банера на сторінці, але потім кожен ресурс може прив’язати інше зображення для відображення шаблоні. Це щось на зразок довільних полів WordPress, але з великим набором функцій.

Можна комбінувати будь-які з цих елементів за допомогою категорій (Categories). Не забувайте їх використовувати, щоб фрагменти коду і фрагменти були організовані, і ними було простіше користуватися.

Знайомство з адміністративною панеллю (Manager)

Адмін-панель CMS MODX Revolution ґрунтується на ExtJS. За рахунок цього можна працювати з drag and drop інтерфейсом, формами, динамічними таблицями, контекстним меню правої кнопки миші і багатьом іншим.

Зручна функція управління дозволяє вказувати джерела медіа-ресурсів, які також прив’язуються до прав доступу. У вас можуть бути такі ресурси, доступ до яких клієнт отримує лише після авторизації. При цьому конкретні ресурси для певних користувачів можуть бути доступні лише в режимі read-only.

Налаштування системи ґрунтуються на просторі імен. Можна створити простір імен для самого себе і окремо для того, щоб використовувати його в якомусь з елементів програми.

Адміністративна панель не така вже й складна, просто потрібно якийсь час на знайомство та вивчення всіх функцій і можливостей:

MODX: краща CMS, якої ви ніколи не користувались

Контекст

MODX: краща CMS, якої ви ніколи не користувались

Хочу звернути вашу увагу на пункт Website. Це «Контекст», який відповідає за те, що бачать користувачі, коли потрапляють на ваш сайт. У контекстів можуть бути абсолютно різні дерева ресурсів, права доступу, мову і т. д. За замовчуванням, контекст Mgr прихований з дерева.

Контексти можна розцінювати як повністю окремі сайти, хоча навіть великі і складні ресурси рідко користуються перевагою від створення додаткових контекстів. Одне з поширених застосувань контекстів полягає у створенні на сайті розділу для зареєстрованих користувачів. Все, що від вас вимагається, це заборонити гостям бачити певний контекст.

Можна використовувати контексти як вам заманеться. Але будьте готові до того, що якщо авторизований користувач в одному з контекстів, це зовсім не означає, що у нього буде доступ до всіх іншим. Якщо потрібно зробити одну форму авторизації для всіх контекстів, то знадобиться трохи попрацювати.

Контексти можна використовувати для відділення розділів сайту. Деякі використовують їх для розділення версій сайту на різних мовах.

Шаблони і теги

Я вже згадував про те, що в MODX CMS є вбудована система тегів шаблону. Давайте коротко ознайомимося з її.

Кожен тег відкривається і закривається двома квадратними дужками [[ … ]].

Спеціальні символи визначають, що саме використовується: фрагмент коду, ресурси чи системні налаштування. Як ними користуватися:

[[*…]]: зірочка відповідає за ресурси. Тобто, за конкретні дані, використовувані поточним джерелом. Наприклад, заголовок сторінки або основний контент. Аналогічним чином можна використовувати змінні шаблону.
[[++…]]: здійснюється пошук системних налаштувань, будь то site_url або довільна налаштування начебто company_phone1 (якщо до цього ви її створили).
[[~##]]: цей тег генерує URL ресурсу по ID (наприклад, [[~32]]).
[[$…]]: цей тег витягує HTML-код з фрагмента.
[[…]]: тег без спецсимвола призведе до запуску фрагменту.
[[%…]]: виводить мовну рядок.
[є [ … ]]: коментар до коду MODX.
[[!…]]: знак оклику вказує MODX на те, що не потрібно кешувати висновок даного тега; його потрібно використовувати в доповнення до попередніх символів. Якщо ви викликаєте [[!$SomeChunk]], то висновок буде оброблятися кожен раз замість того, щоб виводитися з кеша. Я вже говорив, що в MODX CMS функціональні можливості входить вбудована система кешування?

Параметри тегів

До тегам можна застосовувати параметри і фільтри і таким чином змінювати їх висновок. Наприклад, можна додати кілька параметрів автоматично згенеровані URL-адресою:

Тут

З прикладу видно, що синтаксис із застосуванням параметрів злегка відрізняється від параметрів у звичній рядку запиту URL. Питальний знак позначає початок списку параметрів, і кожного параметра починається зі знаку &, а значення полягають у зворотні лапки.

Висновок наведеного вище тега буде виглядати наступним чином:

Тут

Сниппет також можна забезпечити додатковими даними, якщо запустити її таким чином:

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

Ми запускаємо сніппет з назвою MyCustomSnippet, і задаємо йому додаткові дані через поле input зі значенням something tasty. В PHP автоматично створюється змінна з ім’ям $input, яку пізніше можна використовувати в сніппеті.

Теги можна вбудовувати один в одного. Один з популярних тегів виглядає наступним чином:

Посилання на сторінку

Тут є вказівка ресурсу [[*id]], вбудоване в тег посилання [[~#]]. Внутрішні теги парсятся до зовнішніх.

В інших випадках можна запускати HTML-код і виводити динамічні дані, які добуваються з фрагменту. Виглядати це буде так:

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

Тег chunk використовує фрагмент для того, щоб знати, про яких саме даних йдеться.

Так як наведений вище тег запускає фрагмент, що складається лише з HTML-коду, то як він зчитує значення даних? Вони доступні автоматично завдяки тегу placeholder:

Заголовок

[[+data]]

Заглушки (placeholders) найчастіше використовують саме так.

Фільтри виведення

В CMS MODX Revolution теги приймають не тільки параметри. До них також можна застосовувати фільтри виводу. Фільтри запускають код постобробки виводу. Можна утворити ланцюжок з декількох фільтрів. Найпростіший приклад, наведений нижче, змінює регістр рядки:

[[SomeSnippet:ucase]]

Фільтр починається з двокрапки, і повинен бути вказаний до параметрів. Подивіться, як виглядає ланцюжок з декількох фільтрів:

[[SomeSnippet:ucase:replace=`this==that`? ¶m1=`Go big`]]

В даному прикладі результат оголошення Snippet спочатку конвертується у верхній регістр, а потім запускається спеціальний фільтр replace, який змінює стан справ. Після фільтрів йде перелік параметрів, що починається зі знаку запитання.

Стандартних фільтрів не так вже й багато, і ознайомитися з ними можна тут.

Будь фрагментом можна застосовувати як фільтр. Для цього потрібно використовувати назву фрагменту в якості фільтра:

[[$CallingChunk:mySnippet]]

Якою б HTML-код не відправлявся з допомогою CallingChunk, у mySnippet буде до нього доступ, і його можна буде змінювати. Значення $CallingChunk доступно в PHP всередині змінної $input, де ви отримаєте відповідь відредаговане значення (детальніше про це можна дізнатися тут).

Фільтр можна застосовувати для створення повноцінної логіки «if then else».

Якщо і цього недостатньо

На сайтах на MODX CMS можна розподіляти контент за категоріями, вибудовувати відносини елементів у форматі parent/child, групувати контент в цілях безпеки, створювати плагіни для валідації даних, які вносять ваші користувачі.

Також можна редагувати типи вмісту та MIME-дані, розширення сторінок (використовувати .html чи ні), а в якості джерела медіафайлів використовувати бібліотеку Amazon S3.

Редагувати можна як у форматі звичайного тексту/HTML-коду або заради зручності встановити доповнення зразок TinyMCE, CodeMirror або ACE. Тут навіть є свій редактор для Markdown. Це вже не кажучи про розширення для відстеження редакцій і експорту коду для подальшого використання в інших сайтах на MODX.

У елементів теж є властивості, що нагадують системні налаштування, які призначені виключно для конкретного елемента. Так що, якщо ви створили сніппет на PHP, то його властивості можна використовувати для створення стандартних налаштувань для подібних модулів.

В MODX CMS адмінці змінні шаблонів можна розподіляти по категоріях, а потім використовувати окремими групами при редагуванні ресурсів. Це зручно, коли потрібно створювати власний контент, який користувачі згодом зможуть змінювати.

Недоліки

Revolution демонструє нам досвід розробників, але при цьому не задіює деякі сучасні PSR-стандарти типу автоматичного завантаження або простору імен.

MODX дійсно багатофункціональна, безпечна і готова до масштабування. Однак, можливо, ви часто будете стикатися з критикою від багатьох розробників.

Ще одна проблема полягає у використанні ExtJS. Цей фреймворк хороший, але в MODX використовується його застаріла версія. І оновити її не можна, так як це порушить підтримку безлічі сторонніх доповнень.

Не рахуючи цих основних недоліків, єдині труднощі, з якими я стикався при роботі з MODX, полягають у налаштуванні платформи на серверній стороні. Цій проблемі присвячена окрема гілка на офіційному форумі системи.

На завершення

MODX: краща CMS, якої ви ніколи не користувались

У цій статті я спробував надати якомога більше інформації про цю маловідому, але вкрай цікавою CMS.

Як і будь-який інший інструмент, ця платформа підходить не для всіх випадків. Я не буду рекомендувати MODX CMS технічно підкованим людям. Але якщо ви розробник з хорошим досвідом, і вам необхідно запропонувати клієнтам максимально захищене рішення, то цей варіант.

Якщо потрібна повна свобода з точки зору дизайну, і у вас є навики в розробці, то рекомендую спробувати MODX в дії!

Переклад статті «MODX: The Best CMS you’ve Never Used» був підготовлений дружною командою проекту Сайтостроение від А до Я.