Простыми словами — если мы создадим плагин, у которого отметим на вкладке «Системные события» галочку OnDocFormSave, то код этого плагина будет запущен после сохранения любого ресурса.
В коде плагина мы легко можем определить, какой ресурс был сохранён — только что созданный или уже существовавший ранее. Это нужно, если мы захотим обрабатывать только поля новых ресурсов, но ничего не менять, если в ресурс просто вносятся какие-то изменения. Для этой цели MODX передаёт нам параметр $mode:
<?php if ($mode == 'new') { // Здесь пишем наш код }
Такой плагин позволит нам упростить добавление видео-роликов на сайт в виде ресурсов. При создании ресурса в поле pagetitle мы будем вставлять ссылку на видео с YouTube, а плагин будет получать название видео, его описание и сохранять это всё в полях ресурса.
<?php if ($mode == 'new') { // Будем обрабатывать только те ресурсы, в заголовке которых нет пробела if (strpos(trim($resource->pagetitle), ' ') === false) { // Пытаемся получить ID видео из заголовка ресурса preg_match('#(\.be/|/embed/|/v/|/watch\?v=)([A-Za-z0-9_-]{5,11})#', $resource->pagetitle, $matches); if(isset($matches[2]) && $matches[2] != ''){ // Если ID получено, сохраняем его в переменной $code = $matches[2]; } else { // Если ID видео не удалось получить, ничего не делаем return true; } // Сохраняем ID видео в ТВ-поле (например, чтобы в шаблоне вывести сам ролик) $resource->setTVValue('video', $code); // Получаем название видео и описание $key = 'AIzaSyDXK7dCc4C3rjOCY6H5JXDeKqiVO20sQ0U'; // Ключ API YouTube $url = 'https://www.googleapis.com/youtube/v3/videos?part=snippet&id=' . $code . '&key=' . $key; $json = file_get_contents($url); $video = $modx->fromJSON($json); // Заголовок $pagetitle = $video['items'][0]['snippet']['title']; // Описание (+ разбиваем на параграфы) $content = explode(PHP_EOL, $video['items'][0]['snippet']['description']); // Записываем полученные данные в ресурс $resource->set('pagetitle', $pagetitle); $resource->set('content', '<p>' . implode('</p>'.PHP_EOL.'<p>', $content) . '</p>'); // Генерируем новый псевдоним $resource->set('alias', $resource->cleanAlias($pagetitle)); // И сохраняем ресурс $resource->save(); } }
В коде плагина можно ограничить обрабатываемые ресурсы каким-нибудь разделом через $resource->parent или шаблоном через $resource->template, а можно оставить как есть — плагин всё равно будет обрабатывать только те ресурсы, в заголовок которых вставлена ссылка на YouTube.
Кстати, для этой же цели можно использовать дополнение VideoGallery. Данный плагин представлен только как пример — вы можете обрабатывать поля ресурса как вам подскажет фантазия.
от
???
Просто decode, относительно безопасен, в отличии от
такой манипуляции над непровалидированым массивом.
Вижу
Пардон
А аналогов array_get и array_set нету же у Modx? Уже все позабыл…