Нотатки програміста про нові можливості MODxRevolution

У цій статті хочу розглянути деякі нові можливості MODx Revolution, яких не було в молодшій гілці – MODx Evolution. З цієї CMF я почав працювати ще коли була доступна версія modx-2.0.0-beta-2, тобто. приблизно півтора роки тому. Можу сказати, що за період з літа 2009 р., коли система була тільки на стадії бети, до релізу влітку 2010 р., MODx пройшов великий шлях у своєму розвитку, додалися нові можливості, став швидше і краще працювати старий функціонал. Я вважаю, що в даний час MODx Revolution є дійсно потужною платформою для побудови найрізноманітніших веб-застосунків, від найпростіших сайтів до великих порталів. Тож почнемо.

Я постараюся описати такі нововведення MODx Revolution:

  1. xPDO
  2. Простір імен
  3. Контексти
  4. Нова система кешування
  5. Інтернаціоналізація
Тепер про все по порядку.

Спочатку витяг з опису xPDO з офіційного сайту:

xPDO – це легковажна ORB-бібліотека, яка працює на PHP 4 та 5, надаючи переваги нового стандарту доступу до баз даних у PHP 5.1 та вище – PDO. Вона реалізує дуже простий, але ефективний патерн Active Record для доступу до даних.

xPDO – розроблена спільнотою MODx ORB-бібліотека, на якій базується вся робота системи, навіть основний клас MODx є спадкоємцем класу xPDO. У MODx Revolution всі операції з базою даних виконуються за допомогою xPDO, розробникам компонентів також рекомендується використовувати цю бібліотеку, проте старий механізм роботи з базою даних з MODx Evolution поки що залишено для зворотної сумісності. xPDO дозволяє використовувати єдиний інтерфейс зв'язку з різними типами баз даних. На даний момент доступні конектори для MySQL таSQLite, надалі планується розширення списку підтримуваних БД. Всі маніпуляції з даними виконуються за допомогою спеціалізованих методів. Для вибірки, створення, оновлення та видалення даних не потрібне використання прямих запитів, завдяки чому практично виключаються SQL-ін'єкції.

Наступний приклад вибирає з бази даних усі ресурси в контексті web, у яких батьківський ресурс встановлений у 3 та роздруковує їх заголовки.

//вибираємо ресурси за заданою умовою $resources = $modx->getCollection(“modResource”, array( “parent” => 3, “context_key” => “web” )); //проходимо отриманим масивом і виводимо заголовок ресурсу foreach ($resources as $resource) echo($resource->get(“pagetitle”).””); >

Схожим чином виконуються створення, редагування та видалення об'єктів:

//створюємо новий об'єкт $resource = $modx->newObject(“modResource”); //встановлюємо заголовок та вміст сторінки $resource->set(“pagetitle”, “Мій заголовок”); $resource->set(“content”, “Мій вміст”); //і зберігаємо до бази даних. //Увага! До виклику цього методу дані до бази даних не запишуться! $resource->save();

//отримуємо ресурс з ідентифікатором 1 $resource = $modx->getObject(“modResource”, 1); //встановлюємо новий заголовок $resource->set(“pagetitle”, “Новий заголовок”); //і зберігаємо зміни $resource->save();

//отримуємо ресурс з ідентифікатором 5 $resource = $modx->getObject(“modResource”, 5); //і видаляємо його $resource->remove();

Простір імен

Простір імен використовуються для ідентифікації різних компонентів, що не входять в ядро ​​системи. Фактично, простір імен – це папка уcore/components, що містить файли моделей для xPDO, словники та інші необхідні компоненти ресурси. Також простір імен використовується при створенні додаткових сторінок і пунктів меню в системі адміністрування. Кожний зовнішній компонент повинен мати свій простір імен, який можна створити в системі адміністрування.

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

Політики доступу до контекстів реалізуються за допомогою набору прав, які встановлюються для певної групи користувачів у певному контексті. Отже, можна заборонити певним користувачам редагувати чи навіть переглядати ресурси у певному контексті. За умовчанням в системі після установки присутні 2 контексти: web (контекст частини сайту) і mgr (контекст адміністративної панелі).

Нова система кешування

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

// пишемо щось у кеш $colors = array('red','blue','green'); $modx->cacheManager->set('colors',$colors); /*запишеться в core/cache/colors.cache.php */

// тепер отримуємо записані дані $colors = $modx->cacheManager->get('colors'); foreach ($colors as $color) < echo $color.'-'; > /* виведе 'red-blue-green' */

Також можна видалити збережені дані. Приклад видалення:

Інтернаціоналізація

MODx Revolution дозволяє створювати інтернаціоналізовані версії сайтів, використовуючи словники, які зберігаються у файлах чи базі даних. Словники поділяються на такі рівні: мови, теми та рядки. У файловій системі мови є папками, які містять файли з темами, які, у свою чергу, містять рядки.

Розглянемо приклад організації зберігання системних словників MODx у файловій системі. Корнева папка словників містить у собі підпапки, імена яких збігаються з позначеннями мов, прийнятими IANA (наприклад, en або ru). Далі кожна мовна підпапка містить файли з іменами у форматі имя_темы.inc.php. І кожен файл з темою містить рядки у форматі

На сторінку сайту значення рядка зі словника вставляється наступним тегом:

[[%ідентифікатор_рядка? &topic=`ім'я_теми` &namespace=`modx` &language=`мова`]]

Параметр namespace використовується для визначення простору імен, для якого слід завантажити лексикон. Параметр language необов'язковий, за його відсутності буде вибиратися мова, встановлена ​​в установках системи за промовчанням.

Я спробував розглянути лише деякі нові можливості MODx Revolution. Ця система таїть у собі набагато більше, ніж я зараз можу собі уявити. Я із задоволенням продовжую вивчати цю чудову, на мою думку, CMF, і ще жодного разу в ній не розчарувався.