MODX плагины и события для них (Events)

Плагины и события (Events) в MODX, что с ними делать?

MODX плагины и события для них (Events)

О том что это, написано много. Поэтому просто вот.

  • core/model/modx/processors/system/clearcache.class.php (71)
  • manager/controllers/default/system/refresh_site.php (11)
  • Параметры

Запускается перед обновлением кэша.

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeCacheUpdate':
        $modx->log(modX::LOG_LEVEL_ERROR, 'Стартуем!');
        break;
}
                

Теперь обновите кэш, и увидите "Стартуем!"

  • core/model/modx/processors/element/chunk/remove.class.php (16)
  • Параметры
    • chunk (ссылка на объект modChunk)
    • id (id чанка)

Запускается перед удалением чанка.

Такой плагин выведет сообщение о том, что нельзя удалять чанк:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeChunkFormDelete':
        if ($id == 69){
            $modx->event->output("Ты нахрен обалдел!? Нельзя удалять чанк ".$chunk->get('name'));
        }
        break;
}
                
  • core/model/modx/processors/element/chunk/update.class.php (23)
  • core/model/modx/processors/element/chunk/create.class.php (22)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • chunk (ссылка на объект modChunk)
    • id (id чанка)

Запускается после отправки формы, но перед тем как сохранить чанк.

Такой плагин выведет сообщение если не заполнено поле описание:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeChunkFormSave':
        //если обновляем существующий чанк
        if ($mode == modSystemEvent::MODE_UPD){
            //если не заполнено описание
            if (!$chunk->get('description')){
                $modx->event->output("Голову ты дома не забыл?");
            }
        }
        break;
}
                

Такой плагин запишет в "Журнал ошибок" был ли создан новый чанк или обновлен существующий:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeChunkFormSave':
        if ($mode == modSystemEvent::MODE_UPD){
            echo 'Был обновлен существующий чанк';
        } elseif ($mode == modSystemEvent::MODE_NEW){
            echo 'Был создан чанк';
        }
        break;
}
                
  • core/model/modx/processors/resource/delete.class.php (169)
  • Параметры
    • resource (ссылка на объект modResource)
    • id (id ресурса)
    • children (массив id_шников детей которые будут тоже удалены)

Запускается перед удалением ресурса.

Такой плагин выведет сообщение о том, что нельзя удалять определенный ресурс, и в логи добавит запись:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeDocFormDelete':
        //если id=7
        if ($id == 7){
            $modx->log(modX::LOG_LEVEL_ERROR, 'Кто-то пытался удалить ресурс '.$resource->get('pagetitle'));
            $response = array(
            	'success' => false,
            	'message' => 'Нельзя удалять! А то голову с плеч!',
            	'data' => array(),
            );
            echo $modx->toJSON($response);
            exit;
        } 
        break;
}
                

Такой плагин запишет в "Журнал ошибок" id удаленного ресурса и его детей если они есть:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeDocFormDelete':
        if (count($childrenIds) > 0) {
            $children = $childrenIds;
        }
        $modx->log(modX::LOG_LEVEL_ERROR, 'Был удален ресурс '.$resource->get('pagetitle').print_r($children));
        break;
}
                
  • core/model/modx/processors/resource/create.class.php (54)
  • core/model/modx/processors/resource/update.class.php (55)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • id (id ресурса, для новых будет 0)
    • resource (ссылка на объект modResource)

Запускается перед сохранением ресурса.

Важно! Перед использование этого события нужно знать.

  • Изменение или установка значения какого-либо ТВ лучше сделать с помощью OnDocFormSave. Процесс сохранения ТВ во время onBeforeDocFormSave сложнее из-за рендера ТВ значений.
  • Передавая сообщения в $modx->event->output() пользователю будет отображаться модальное окно. Делая это страница не будет сохранятся.
  • При использовании $modx->event->output() запрещается использовать html теги, только текст.
  • При установке значение какого либо поля с помощью $resource->set, не нужно вызывать $resource->save()

Такой плагин не разрешит создавать новые ресурсы, и не будет сохранять ресурсы, у которых не заполнено introtext:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeDocFormSave':
        if ($mode == modSystemEvent::MODE_UPD) {
            //если не заполнен introtext
            if (!$resource->get('introtext')){
                $modx->event->output("Голову ты дома не забыл, а про 'Ключевые слова' забыл!");
            }
        } elseif ($mode == modSystemEvent::MODE_NEW) {
            $modx->event->output("Вам нельзя создавать ресурсы!");
        }
        break;
}
                

Такой плагин установит значение поля template=1 у всех ресурсов находящийхся в корне т.е parent=0:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeDocFormSave':
        if ($resource->get('parent') == 0) {
            $resource->set('template', '1');
        }
        break;
}
                
  • core/model/modx/processors/security/logout.class.php (36)
  • Параметры
    • user (ссылка на объект modUser. Который прошел по ссылке)
    • loginContext (ключ контекста из которого выходят)
    • addContexts (дополнительные контексты, в которых выход также происходит.)

Запускается перед тем как пользователь разлогиниться.

Такой плагин запишет в "Журнал ошибок" id вышедшего пользователя и откуда он вышел:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeManagerLogout':
        $modx->log(modX::LOG_LEVEL_ERROR, 'Пользователь с id'.$user->get('id').' разлогинился в контексте '.$loginContext.' и еще вот в этих'.print_r($addContexts));
        break;
}
                

Такой плагин выведет сообщение пользователю, о том что ему нельзя покидать контекст mgr:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeManagerLogout':
        //если попытается сбежать, мы его остановим
        if ($loginContext = 'mgr'){
            $response = array(
            	'success' => false,
            	'message' => 'Нельзя выходить! Ты один из нас.. один из нас.. один из нас.....',
            	'data' => array(),
            );
            echo $modx->toJSON($response);
            exit;
        }
        break;
}
                
  • core/model/modx/modx.class.php (2590)
  • Параметры
    • Но к ресурсу можно обратится $modx->resource

Запускается после того как ресурс загружен но еще не закэшировался. Если ресурс не кэшируемый, то это событие не сработает.

Такой плагин запишет в "Журнал ошибок" id загруженного ресурса:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeSaveWebPageCache':
        $res = $modx->resource->get('id');
        $modx->log(modX::LOG_LEVEL_ERROR, 'Ресурс с id '.$res.' успешно загрузился');
        break;
}
                
  • core/model/modx/processors/security/logout.class.php (36)
  • Параметры
    • user (ссылка на объект modUser. Который прошел по ссылке)
    • loginContext (ключ контекста из которого выходят)
    • addContexts (дополнительные контексты, в которых выход также происходит.)

Запускается перед тем как пользователь разлогиниться.

Такой плагин запишет в "Журнал ошибок" id вышедшего пользователя и откуда он вышел:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeWebLogout':
        $u = $user->get('id');
        $modx->log(modX::LOG_LEVEL_ERROR, 'Пользователь с id '.$u.' разлогинился в контексте '.$loginContext.' и еще вот в этих'.print_r($addContexts));
        break;
}
                
  • core/model/modx/modcachemanager.class.php (597, 757)
  • Параметры
    • results (результат)
    • paths (массив путей, которые должны были быть очищены)
    • options (массив параметров очистки)

Запускается после того как кэш очищен.

Такой плагин выведет на экран и запишет в "Журнал ошибок" результат выполнения:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnCacheUpdate':
        $modx->log(modX::LOG_LEVEL_ERROR, print_r($results));
        break;
}
                
  • core/model/modx/processors/element/chunk/remove.class.php (17)
  • Параметры
    • chunk (ссылка на объект modChunk)
    • id (id чанка)

Запускается после того как чанк удален.

Такой плагин запишет в "Журнал ошибок" id и имя удаленного чанка:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnChunkFormDelete':
        $n = $chunk->get('name');
        $modx->log(modX::LOG_LEVEL_ERROR, 'Был удален чанк с id '.$id.' его звали '.$n.' сердца у тебя нет!');
        break;
}
                
  • manager/controllers/default/element/chunk/create.class.php (120)
  • manager/controllers/default/element/chunk/update.class.php (133)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • id (id чанка. Будет 0 для новых чанков)
    • chunk (ссылка на объект modChunk. Будет NULL в новых чанках)

Запускается до изменения чанка, но JS подгружается. Можно использовать для визуализации пользовательских JavaScript в mgr.

Такой плагин подгружает style в head и сделает текст в .x-form-text красным:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnChunkFormPrerender':
        $modx->regClientStartupHTMLBlock('
        <style>
        .x-form-text {color: #ff0000;}
        </style>');
        break;
}
                
  • manager/controllers/default/element/chunk/create.class.php (103)
  • manager/controllers/default/element/chunk/update.class.php (167)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • id (id чанка. Будет 0 для новых чанков)
    • chunk (ссылка на объект modChunk. Будет NULL в новых чанках)

Запускается во время рендеринга. Можно впихнуть HTML прямиком в форму.

Такой плагин добавить контент чанку и сохранит его:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnChunkFormRender':
        //если обновляем существующий
        if ($mode == modSystemEvent::MODE_UPD) {
            //добавили контент чанка
            $chunk->setContent('<p>Контент чанка</p>');
            //можно сразу сохранить новый контент
            $chunk->save();
        }
        break;
}
                

Такой плагин добавить контент чанку если у него нет контента и сохранит его:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnChunkFormRender':
        //если обновляем существующий
        if ($mode == modSystemEvent::MODE_UPD) {
            //забираем контент чанка
            $content = $chunk->getContent();
            // если контента нет, впихиваем новый
            if (!$content){
                $chunk->setContent('<p>Контент новый</p>');
                //можно сразу сохранить новый контент
                $chunk->save();
            }
        }
        break;
}
                

Такой плагин добавить контент чанку но не сохранит его:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnChunkFormRender':
        //если обновляем существующий
        if ($mode == modSystemEvent::MODE_UPD) {
            //меняем все содержимое чанка
            $chunk->setContent('<p>Контент новый</p>');
            $chunk->set('name','NewChunkName');
            $chunk->set('description','Описание');
            //можно сразу сохранить новый контент $chunk->save();
        }
        break;
}
                
  • core/model/modx/processors/element/chunk/create.class.php (24)
  • core/model/modx/processors/element/chunk/update.class.php (24)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • id (id чанка. Будет 0 для новых чанков)
    • chunk (ссылка на объект modChunk. Будет NULL в новых чанках)

Запускается после сохранения.

Такой плагин запишет в "Журнал ошибок" id сохранённого чанка (нового или только что созданного):

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnChunkFormSave':
        if ($mode == modSystemEvent::MODE_NEW) {
            $modx->log(modX::LOG_LEVEL_ERROR, 'Сохранен новый чанк с id '.$id);
        } elseif ($mode == modSystemEvent::MODE_UPD){
            $modx->log(modX::LOG_LEVEL_ERROR, 'Сохранен существующий чанк с id '.$id);
        }
        break;
}
                
  • core/model/modx/processors/resource/delete.class.php (210)
  • Параметры
    • resource (Ссылка на объект modResource)
    • id (id ресурса)
    • children (массив id_шников детей которые тоже удалены)

Запускается после удаления ресурса.

Такой плагин отправит на почту список удаленных ресурсов:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocFormDelete':
        $modx->getService('mail', 'mail.modPHPMailer');
        $modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
        $modx->mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));
        //Адрес получателя
        $modx->mail->address('to', 'mail@pitrooo.ru');
        //Заголовок
        $modx->mail->set(modMail::MAIL_SUBJECT, 'Были удалены ресурсы');
        //тело письма
        foreach ($children as $value) {
            $resource = $modx->getObject('modResource', $value);
            $name .= '<br>'.$resource->get('pagetitle');
        }
        $contentbody = 'Были удален ресурс с id '.$id.' а вместе с ним '.$name;
        $modx->mail->set(modMail::MAIL_BODY, $contentbody);
        /*Отправляем*/
        $modx->mail->setHTML(true);
        if (!$modx->mail->send()) {
            $modx->log(modX::LOG_LEVEL_ERROR,'Произошла ошибка при попытке отправки сообщения электронной почты: '.$modx->mail->mailer->ErrorInfo);
        }
        $modx->mail->reset();
        break;
}
                
  • manager/controllers/default/resource/resource.class.php (160)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • resource (ссылка на объект modResource. Будет NULL для новых ресурсов)
    • id (идентификатор ресурса. Будет 0 для новых ресурсов)

Запускается перед тем как форма редактирования загрузится.

Такой плагин будет выводить сообщение при клике на pagetitle и добавить текст на страницу:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocFormPrerender':
        $modx->regClientStartupHTMLBlock('
        <script type="text/javascript">
    		Ext.onReady(function() {
                var pagetitle = Ext.select("#modx-resource-pagetitle");
                pagetitle.on("click",function(node,e){
                    Ext.MessageBox.alert("Внимание","Ты только что нажал на pagetitle.");
                    
                },pagetitle);
    		});
    	</script>');
    	$modx->event->output('<h2 style="padding: 50px 0 0 15px;">Привет дружище!</h2>');
        break;
}
                
  • manager/controllers/default/resource/resource.class.php (174)
  • manager/controllers/default/resource/create.class.php (34)
  • manager/controllers/default/resource/update.class.php (39)
  • manager/controllers/default/resource/symlink/create.class.php (23)
  • manager/controllers/default/resource/symlink/update.class.php (24)
  • manager/controllers/default/resource/weblink/create.class.php (23)
  • manager/controllers/default/resource/weblink/update.class.php (24)
  • manager/controllers/default/resource/staticresource/create.class.php (23)
  • manager/controllers/default/resource/staticresource/update.class.php (23)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • resource (ссылка на объект modResource. В версии 2.4 будет пустой объект, в более новых Будет NULL для новых ресурсов)
    • id (идентификатор ресурса. Будет 0 для новых ресурсов)

Запускается в форме редактирования диспетчера. Удобно для вставки HTML в формах и 2.4+ для установки значений по умолчанию на новые ресурсы

В версии 2.4.0+ можно устанавливать значения для полей:

  • pagetitle
  • longtitle
  • description
  • introtext
  • content
  • link_attributes
  • alias
  • menutitle

Рекомендуется для установки на новые ресурсы, для существующих значения будут перезаписаны.

Такой плагин установит значение по умолчанию для новых ресурсов:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocFormRender':
        if ($mode == modSystemEvent::MODE_NEW) {
            //устанавливаем значения по умолчанию
            $resource->set('pagetitle', 'Заголовок');
            $resource->set('description', 'Описание');
            $resource->set('content', 'Контент');
        }
        break;
}
                
  • core/model/modx/processors/resource/update.class.php (56)
  • core/model/modx/processors/resource/create.class.php (589)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • resource (ссылка на объект modResource)
    • id (id ресурса. У новых тоже есть)

Запускается после того как ресурс сохранен.

Важно! Перед использование этого события нужно знать.

  • Если нужно изменить ТВ, то лучше изменить их тут, а не через OnBeforeDocFormSave.
  • В отличие от OnBeforeDocFormSave, это событие не поддерживает $modx->event->output() метод.
  • Сохранение происходит автоматически. Не нужно вызывать $resource->save()

Такой плагин выведет в "Журнал ошибок" массив сохраняемого ресурса:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocFormSave':
        $modx->log(MODX_LOG_LEVEL_ERROR, print_r($resource->toArray(),true) );
        break;
}
                

Такой плагин установит значение ТВ price текущего ресурса равным 128, при ошибке в "Журнал ошибок" добавится запись:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocFormSave':
        //если у ресурса шаблон=5
        if ($resource->get('template') == 5) {  
            // после сохранения значение ТВ price=128
            if(!$resource->setTVValue('price', '128')) {
                $modx->log(modX::LOG_LEVEL_ERROR, 'Возникли проблемы при установке значения ТВ.');
            }
        }
        break;
}
                
И не важно заполнено ли поле price перед сохранением, или нет. Плагин запишет 128.
  • core/model/modx/processors/resource/publish.class.php (108)
  • Параметры
    • id (id опубликованного ресурса)
    • resource (ссылка на объект modResource который публикуется)

Запускается после того как ресурс опубликован через контекстное меню документа в дереве ресурсов.

Важно! Перед использование этого события нужно знать.

  • Событие срабатывает только при публикации ресурса через контекстное меню документа в дереве ресурсов. Если вы поставите галочку опубликован при редактировании документа на странице самого документа, ничего не произойдет.

Такой плагин выведет в "Журнал ошибок" массив публикуемого ресурса, а на экран сообщение об успехе:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocPublished':
        $response = array(
        	'success' => false,
        	'message' => 'Публикация прошла успешно!',
        	'data' => array(),
        );
        echo $modx->toJSON($response);
        exit; 
        $modx->log(modX::LOG_LEVEL_ERROR, print_r($resource->toArray(),true));
        break;
}
                
  • core/model/modx/processors/resource/unpublish.class.php (92)
  • Параметры
    • id (id ресурса снятого с публикации)
    • resource (ссылка на объект modResource который снимается с публикации)

Запускается после того как ресурс снят с публикации через контекстное меню документа в дереве ресурсов.

Важно! Перед использование этого события нужно знать.

  • Событие срабатывает только при снятии публикации ресурса через контекстное меню документа в дереве ресурсов. Если вы уберёте галочку опубликован при редактировании документа на странице самого документа, ничего не произойдет.

Такой плагин выведет в "Журнал ошибок" массив снятого с публикации ресурса, а на экран сообщение об успехе:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocUnPublished':
        $response = array(
        	'success' => false,
        	'message' => 'Ресурс снят с публикации!',
        	'data' => array(),
        );
        echo $modx->toJSON($response);
        exit; 
        $modx->log(modX::LOG_LEVEL_ERROR, print_r($resource->toArray(),true));
        break;
}
                
  • core/model/modx/modrequest.class.php (270)
  • Параметры

Запускается при загрузке ресурса из кэша. В MODX 2.3+ для доступа к свойствам ресурса можно использовать объект Event.

Такой плагин заменит pagetitle, значение ТВ и контента:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnLoadWebPageCache':
        $modx->event->params['resource']->pagetitle = 'Новый заголовок';
        // меняем значение ТВ
        $tv = $modx->event->params['resource']->price[1] = '128';
        /*
        // массив значений ТВ 
        array (
            0 => 'name', //название ТВ
            1 => 'значение', //значение ТВ
            2 => 'default', //параметры вывода ТВ
            3 => NULL,
            4 => 'text', //тип ТВ
        )
        */
        $modx->event->params['resource']->_content = 'Новый контент'.$tv;
        break;
}
                
Все закэшированные значения можно посмотреть в core/cache/resource/web/resources/
  • core/model/modx/processors/security/login.class.php (299)
  • Параметры
    • user (ссылка на объект modUser)
    • attributes
      • rememberme (запомнить пароль пользователя)
      • lifetime (время жизни сессии cookie для входа)
      • loginContext (ключ контекста в котором происходит вход)
      • addContexts (дополнительные контексты в которых осуществляется вход)

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

Такой плагин запишет в "Журнал ошибок" кто и где авторизовался:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnManagerLogin':
        $id = $user->get('id');
        $modx->log(modX::LOG_LEVEL_ERROR, 'Авторизовался пользователь с id '.$id.print_r($attributes));
        break;
}
                
  • core/model/modx/processors/security/logout.class.php (59)
  • Параметры
    • user (ссылка на объект modUser, который вышел)
    • loginContext (ключ контекста откуда вышел)
    • addContexts (дополнительные контексты в которых осуществляется выход)

Запускается каждый раз, когда пользователь выходит из контекста. Сессия при этом удаляется.

Такой плагин запишет в "Журнал ошибок" кто и где вышел:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnManagerLogout':
        $id = $user->get('id');
        $modx->log(modX::LOG_LEVEL_ERROR, 'Вышел пользователь с id '.$id.' из контекста '.$loginContext.' и еще вот этих '.print_r($addContexts));
        break;
}
                
  • core/model/modx/processors/system/clearcache.class.php (23)
  • manager/controllers/default/system/refresh_site.php (17)
  • Параметры
    • results (массив результатов)
    • partitions (массив результатов очистки)

Запускается каждый раз, когда кэш для всего сайта очищен.

Такой плагин выведет в консоли массив того что было очищено:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnSiteRefresh':
        $modx->log(modX::LOG_LEVEL_ERROR, 'Кэш очищен '.print_r($partitions));
        break;
}
                
  • core/model/modx/moduser.class.php (301)
  • Параметры
    • user (Ссылка на объект modUser)
    • newpassword (новый пароль)
    • oldpassword (старый пароль)

Запускается каждый раз, когда пользователь меняет пароль.

Такой плагин выведет в Журнал ошибок" кто поменял пароль, какой у него был пароль и на какой он его поменял:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnUserChangePassword':
        $name = $user->get('username');
        $modx->log(modX::LOG_LEVEL_ERROR, 'Пользователь '.$name.' поменял пароль '.'c '.$newpassword.' на '.$oldpassword);
        break;
}
                
Будьте осторожны
  • core/model/modx/processors/security/login.class.php (299)
  • Параметры
    • user (ссылка на объект modUser)
    • attributes
      • rememberme (запомнить пароль пользователя)
      • lifetime (время жизни сессии cookie для входа)
      • loginContext (ключ контекста в котором происходит вход)
      • addContexts (дополнительные контексты в которых осуществляется вход)

Запускается каждый раз, когда пользователь успешно входит в не в mgr после успешного выполнения любой операции проверки. Событие не влияет на процесс авторизации.

Такой плагин выведет в Журнал ошибок" кто и где авторизовался:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnWebLogin':
        $name = $user->get('username');
        $modx->log(modX::LOG_LEVEL_ERROR, 'Авторизовался пользователь '.$name.print_r($attributes));
        break;
}
                
  • core/model/modx/processors/security/logout.class.php (59)
  • Параметры
    • user (ссылка на объект modUser, который вышел)
    • loginContext (ключ контекста где произошел выход)
    • addContexts (дополнительные контексты в которых осуществился выход)

Запускается каждый раз, когда пользователь выходит из контекста. Сессия при этом удаляется.

Такой плагин выведет в "Журнал ошибок" кто и где разлогинился:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnWebLogout':
        $id = $user->get('id');
        $modx->log(modX::LOG_LEVEL_ERROR, 'Вышел пользователь с id '.$id.' из контекста '.$loginContext.' и еще вот этих '.print_r($addContexts));
        break;
}
                
  • core/model/modx/modresponse.class.php (90, 111)
  • Параметры

Запускается после того, как все теги на странице обработаны, но еще не переданы в браузер.

Такой плагин заменит на страницах слова:

switch($eventName) {
    case 'OnWebPagePrerender': 
        // слова, которые будут заменены
        $words = array("Товар", "Цена");
        // получаем доступ к содержанию страницы
        $output = &$modx->resource->_output;
        // заменяем слова
        $output = str_replace($words,"поменяли",$output); 
        break;
}
                
  • core/model/modx/modmanagercontroller.class.php (147)
  • Параметры
    • controller (экземпляр контроллера на текущей странице менеджера)

Запускается в контроллере менеджера, перед оформлением контента.

Такой плагин выведет в "Журнал ошибок" какой контроллер запущен:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnManagerPageBeforeRender':
        // какой контроллер загружается
        print_r($scriptProperties['controller']->config);
        print_r($scriptProperties['controller']->scriptProperties);
        break;
}
                

Такой плагин выведет на экран "Доступ запрещен" пользователям, у которых в системных настройках указаны id ресурсов в параметре allow_to_update:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnManagerPageBeforeRender':
        switch($scriptProperties['controller']->config['controller']){
            //Проверяем права на редактирование документов
            case 'resource/update':
                // Проверяем наличие настройки allow_to_update (задается в настройках пользователя)
                // В ней мы перечисляем, какие документы пользователю можно редактировать
                // Если настройка задана, но id документа отсутствует в перечисленных разрешенных,
                // То возвращаем ошибку доступа 
                if($allow_to_update = $modx->getOption('allow_to_update')){
                    if(!is_array($allow_to_update)){
                        $allow_to_update = explode(",", $allow_to_update);
                        $allow_to_update = array_map('trim', $allow_to_update);
                    }
                    if(in_array($scriptProperties['controller']->scriptProperties['id'], $allow_to_update)){
                        $scriptProperties['controller']->failure('Доступ запрещен');
                        return;
                    }
                }
                break;
        }
        break;
}
                

Такой плагин подключит нужный нам js на страницы админки:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnManagerPageBeforeRender':
        $modx->controller->addJavascript('url/file.js');
        break;
}
                
  • core/model/modx/modtemplatevar.class.php (75)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • templateVar (экземпляр класса modTemplateVar)
    • cacheFlag (должно ли кэшироваться, по умолчанию $cacheFlag = null)

Загружается перед сохранением переменной шаблона в базе.

Такой плагин выведет в "Журнал ошибок" данные сохраняемого ТВ:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnTemplateVarBeforeSave':
        //массив твшки, со всеми параметрами
        print_r($templateVar->toArray());
        //проверка на обновление или создание самого тв
        if ($mode == modSystemEvent::MODE_NEW){
            echo 'Был создан новый ТВ';
        } elseif ($mode == modSystemEvent::MODE_UPD){
            echo 'Был обновлен старый ТВ';
        }
        break;
}
                
  • core/model/modx/modtemplatevar.class.php (85)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • templateVar (экземпляр класса modTemplateVar)
    • cacheFlag (должно ли кэшироваться, по умолчанию $cacheFlag = null)

Загружается сразу после успешного сохранения шаблона переменной в базе.

Такой плагин выведет в "Журнал ошибок" данные сохраненного ТВ:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnTemplateVarSave':
        //массив твшки, со всеми параметрами
        print_r($templateVar->toArray());
        //проверка на обновление или создание самого тв
        if ($mode == modSystemEvent::MODE_NEW){
            echo 'Был сохранен новый ТВ';
        } elseif ($mode == modSystemEvent::MODE_UPD){
            echo 'Был сохранен старый ТВ';
        }
        break;
}
                
  • core/model/modx/modtemplatevar.class.php (105)
  • Параметры
    • templateVar (экземпляр класса modTemplateVar)
    • cacheFlag (должно ли кэшироваться, по умолчанию $cacheFlag = true)

Загружается прямо перед удалением переменной шаблона.

Такой плагин выведет в "Журнал ошибок" данные удаленного ТВ:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnTemplateVarBeforeRemove':
        //массив твшки, со всеми параметрами
        print_r($templateVar->toArray());
        break;
}
                
  • core/model/modx/modtemplatevar.class.php (114)
  • Параметры
    • templateVar (экземпляр класса modTemplateVar)
    • cacheFlag (должно ли кэшироваться, по умолчанию $cacheFlag = true)

Загружается сразу после удаления переменной шаблона.

Такой плагин выведет в "Журнал ошибок" данные удаленного ТВ:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnTemplateVarBeforeRemove':
        //массив твшки, со всеми параметрами
        print_r($templateVar->toArray());
        break;
}
                
  • core/model/modx/processors/resource/emptyrecyclebin.class.php (29)
  • Параметры
    • ids (массив id_шников ресурсов, которые будут навсегда удалены)
    • resources (еще один массив сданными, на сколько я понял, там вообще все, что удалено, что задействовано. При вызове $resources "Журнал ошибок" сразу растолстеет на несколько мегабайт)

Загружается перед тем как корзина очистится.

Такой плагин выведет в "Журнал ошибок" id удаленных ресурсов:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeEmptyTrash':
        //массив удаленных ресурсов
        print_r($ids);
        break;
}
                

Такой плагин выведет сообщение, о том что в корзине присутствует важный документ, и его нельзя удалять:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeEmptyTrash':
        //если там есть документ с id = 26, то не удаляем
        if (in_array("26", $ids)){
            $response = array(
            	'success' => false,
            	'message' => 'ЭЙ! Там есть документ, который нельзя удалять!',
            	'data' => array(),
            );
            echo $modx->toJSON($response);
            exit;
        }
        break;
}
                
  • core/model/modx/processors/security/login.class.php (63)
  • Параметры
    • username (введенное имя пользователя)
    • password (введенный пароль)
    • attributes
      • rememberme (запомнить пароль пользователя)
      • lifetime (время жизни сессии cookie для входа)
      • loginContext (ключ контекста в котором происходит вход)
      • addContexts (дополнительные контексты в которых осуществляется вход)

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

Такой плагин выведет в "Журнал ошибок" кто, с каким паролем, и куда пытался войти:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeManagerLogin':
        $modx->log(modX::LOG_LEVEL_ERROR, 'Пытался войти пользователь с именем '.$username.' и паролем '.$password.print_r($attributes));
        break;
}
                

Такой сделает пользователя неактивным когда он будет пытатся авторизоватся:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeManagerLogin':
        if ($username == 'manager'){
            $user = $modx->getObject('modUser', array('username' => $username));
            $user->set('active', '0');
            $user->save();
        }
        break;
}
                
  • core/model/modx/modmanagercontroller.class.php (125)
  • Параметры
    • action (массив текущих контроллеров)

Запускается перед управляющим контроллером и после проверки разрешений.

Такой плагин выведет в "Журнал ошибок" какой контроллер загрузился:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeManagerPageInit':
        print_r($action);
        break;
}
                
  • core/model/modx/processors/element/plugin/remove.class.php (16)
  • Параметры
    • plugin (ссылка на объект modPlugin)
    • id (id плагина)

Запускается перед тем как удалится плагин.

Такой плагин выведет сообщение о том, что нельзя удалять плагин:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforePluginFormDelete':
        //если id плагина = 18, выведем сообщение
        if ($id == 18){
            $modx->event->output("Ты нахрен обалдел!? Нельзя удалять плагин ".$plugin->get('name'));
        }
        break;
}
                
  • core/model/modx/processors/element/plugin/create.class.php (25)
  • core/model/modx/processors/element/plugin/update.class.php (26)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • plugin (ссылка на объект modPlugin)
    • id (id плагина. Будет 0 для новых плагинов)

Запускается после отправки, но до того как плагин будет сохранен в менеджере.

Такой плагин выведет сообщение о том, что не заполнено поле description:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforePluginFormSave':
        if (!$plugin->get('description')){
            $modx->event->output("Голову ты дома не забыл, а про дескрипшен забыл!");
        }
        break;
}
                

Такой плагин запретит создавать новые плагины пользователю с id=1:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforePluginFormSave':
        //если это новый плагин
        if ($mode == modSystemEvent::MODE_NEW){
            if ($modx->user->get('id') == 1){
                $modx->event->output("Тебе нельзя создавать новые плагины!");
            }
        }
        break;
}
                
  • core/model/modx/processors/element/snippet/remove.class.php (16)
  • Параметры
    • snippet (ссылка на объект modSnippet)
    • id (id сниппета)

Запускается перед тем как удаляется сниппет.

Такой плагин выведет сообщение о том что нельзя удалять сниппеты:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeSnipFormDelete':
        $modx->event->output("Ты нахрен обалдел!?");
        break;
}
                
  • core/model/modx/processors/element/snippet/update.class.php (24)
  • core/model/modx/processors/element/snippet/create.class.php (23)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • snippet (ссылка на объект modSnippet)
    • id (id сниппета. Будет 0 для новых.)

Запускается после отправки, но до того как сниппет будет сохранен в менеджере.

Такой плагин выведет сообщение о том, что не заполнено поле description:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeSnipFormSave':
        if (!$snippet->get('description')){
            $modx->event->output("Голову ты дома не забыл, а про дескрипшен забыл!");
        }
        break;
}
                

Такой плагин запретит создавать новые сниппеты пользователю с id=1:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeSnipFormSave':
        //если это новый сниппет
        if ($mode == modSystemEvent::MODE_NEW){
            if ($modx->user->get('id') == 1){
                $modx->event->output("Тебе нельзя создавать новые сниппеты!");
            }
        }
        break;
}
                
  • core/model/modx/processors/element/template/remove.class.php (16)
  • Параметры
    • template (ссылка на объект modTemplatе)
    • id (id шаблона.)

Запускается перед тем как шаблон удаляется.

Такой плагин выведет сообщение о том, что нельзя удалять шаблон с id=5:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeTempFormDelete':
        if ($id == 5){
            $modx->event->output("Ты нахрен обалдел!? Нельзя удалять шаблон:".$template->get('templatename'));
        }
        break;
}
                
Сообщение выведется в том случае, если шаблон НЕ назначен какому либо ресурсу. По умолчанию идет проверка, если шаблон назначен хотябы одному ресурсу, то он не удалится.
  • core/model/modx/processors/element/template/update.class.php (25)
  • core/model/modx/processors/element/template/create.class.php (24)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • template (ссылка на объект modTemplate)
    • id (id шаблона. Будет 0 для новых.)

Запускается после отправки, но до того как шаблон будет сохранен в менеджере.

Такой плагин выведет сообщение о том, что не заполнено поле icon:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeTempFormSave':
        if (!$template->get('icon')){
            $modx->event->output("Голову ты дома не забыл, а про значок забыл!");
        }
        break;
}
                

Такой плагин запретит создавать новые шаблоны пользователю с id=1:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeTempFormSave':
        //если это новый шаблон
        if ($mode == modSystemEvent::MODE_NEW){
            if ($modx->user->get('id') == 1){
                $modx->event->output("Тебе нельзя создавать новые шаблоны!");
            }
        }
        break;
}

                
  • core/model/modx/processors/element/tv/remove.class.php (16)
  • Параметры
    • tv (ссылка на объект modTemplateVar)
    • id (id тв.)

Запускается перед тем как шаблон удаляется.

Такой плагин выведет сообщение о том, что нельзя удалять тв с id=14:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeTVFormDelete':
        if ($id == 14){
            $modx->event->output("Ты нахрен обалдел!? Нельзя удалять ТВ:".$tv->get('name'));
        }
        break;
}
                
  • core/model/modx/processors/element/tv/create.class.php (31)
  • core/model/modx/processors/element/tv/update.class.php (31)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • tv (ссылка на объект modTemplateVar)
    • id (id ТВ. Будет 0 для новых.)

Запускается после отправки, но до того как ТВшка будет сохранена в менеджере.

Такой плагин выведет сообщение о том, что не заполнено поле description:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeTVFormSave':
        if (!$tv->get('description')){
            $modx->event->output("Голову ты дома не забыл, а про дескрипшен забыл!");
        }
        break;
}
                

Такой плагин запретит создавать новые ТВ пользователю с id=1:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeTVFormSave':
        //если это новая ТВ
        if ($mode == modSystemEvent::MODE_NEW){
            if ($modx->user->get('id') == 1){
                $modx->event->output("Тебе нельзя создавать новые ТВ!");
            }
        }
        break;
}
                
  • core/model/modx/processors/security/user/activatemultiple.class.php (28)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • user (ссылка на объект modUser)
    • id (id пользователя)

Запускается перед тем как активировать юзверя.

Такой плагин выведет сообщение о том, что нельзя активировать пользователя с id=2:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeUserActivate':
        if ($id == 2){
            $modx->event->output("Ты нахрен обалдел!? Нельзя активировать пользователя ".$user->get('username').' он опасен!');
        }
        break;
}
                

Такой плагин отправить email активированному пользователю:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeUserActivate':
        $modx->getService('mail', 'mail.modPHPMailer');
        $modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
        $modx->mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));
        //Адрес получателя
        $modx->mail->address('to', $user->get('email'));
        //Заголовок
        $modx->mail->set(modMail::MAIL_SUBJECT, 'Ты активирован');
        //тело письма
        $contentbody = 'Ваш аккаунт только что был активирован ';
        $modx->mail->set(modMail::MAIL_BODY, $contentbody);
        /*Отправляем*/
        $modx->mail->setHTML(true);
        if (!$modx->mail->send()) {
            $modx->log(modX::LOG_LEVEL_ERROR,'Произошла ошибка при попытке отправки сообщения электронной почты: '.$modx->mail->mailer->ErrorInfo);
        }
        $modx->mail->reset();
        break;
}
                
  • core/model/modx/processors/security/user/delete.class.php (15)
  • Параметры
    • user (ссылка на объект modUser)
    • id (id пользователя)

Запускается перед тем как удаляется пользователь.

Такой плагин выведет сообщение о том, что нельзя удалять пользователя с id=3:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeUserFormDelete':
        if ($id == 3){
            $modx->event->output("Ты нахрен обалдел!? Нельзя удалять пользователя ".$user->get('username').' он важная шишка!');
        }
        break;
}
                
  • core/model/modx/processors/security/user/update.class.php (16)
  • core/model/modx/processors/security/user/create.class.php (17)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • user (ссылка на объект modUser)
    • id (id пользователя. Будет 0 для новых.)

Запускается после отправки, но до того как пользователь будет сохранен.

Такой плагин выведет сообщение о том, что нельзя сохранять пользователя с id=3:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeUserFormSave':
        if ($id == 3){
            $modx->event->output("Ты нахрен обалдел!? Нельзя сохранять пользователя ".$user->get('username'));
        }
        break;
}
                

Такой плагин не разрешит сохранять других пользователей, только себя:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeUserFormSave':
        //если это старый пользователь
        if ($mode == modSystemEvent::MODE_UPD){
            if ($user->get('id') != $modx->user->get('id')){
                $modx->event->output("Тебе нельзя его трогать!");
            }
        }
        break;
}
                
  • core/model/modx/processors/security/login.class.php (63)
  • Параметры
    • username (имя пользователя)
    • password (пароль)
    • attributes
      • rememberme (запомнить пароль пользователя)
      • lifetime (время жизни сессии cookie для входа)
      • loginContext (ключ контекста в котором происходит вход)
      • addContexts (дополнительные контексты в которых осуществляется вход)

Запускается перед тем как пользователь логинится (не в манагере).

Такой плагин выведет в Журнал ошибок", кто и где авторизовался:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeWebLogin':
        $modx->log(modX::LOG_LEVEL_ERROR, 'Авторизовался пользователь:'.$username.' по паролю: '.$password.print_r($attributes));
        break;
}
                
  • core/model/modx/modcategory.class.php (92)
  • Параметры
    • category (cсылка на объект modCategory)

Запускается перед тем как удаляется категория.

Такой плагин выведет на экран сообщение о том что нельзя удалять категорию:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnCategoryBeforeRemove':
        $response = array(
        	'success' => false,
        	'message' => 'Нельзя удалять категорию: '.$category->get('category'),
        	'data' => array(),
        );
        echo $modx->toJSON($response);
        exit;
        break;
}
                
  • core/model/modx/modcategory.class.php (56)
  • Параметры
    • category (cсылка на объект modCategory)
    • id (id категории)

Запускается перед тем как сохраняется категория.

Такой плагин выведет на экран сообщение о том что нельзя сохранять категорию:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnCategoryBeforeSave':
        $response = array(
        	'success' => false,
        	'message' => 'Нельзя сохранять категорию: '.$category->get('category'),
        	'data' => array(),
        );
        echo $modx->toJSON($response);
        exit;
        break;
}
                
  • core/model/modx/modcategory.class.php (115)
  • Параметры
    • category (cсылка на объект modCategory)

Запускается после того как категория будет удалена.

Такой плагин запишет в "Журнал ошибок" какая категория была удалена:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnCategoryRemove':
        $modx->log(modX::LOG_LEVEL_ERROR, 'Удалена категория: '.$category->get('category'));
        break;
}
                
  • core/model/modx/modcategory.class.php (74)
  • Параметры
    • category (cсылка на объект modCategory)

Запускается после того как категория будет сохранена.

Такой плагин запишет в "Журнал ошибок" какая категория была сохранена:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnCategorySave':
        $modx->log(modX::LOG_LEVEL_ERROR, 'Сохранена категория: '.$category->get('category'));
        break;
}
                
  • core/model/modx/modchunk.class.php (71)
  • Параметры
    • chunk (cсылка на объект modChunk)

Запускается перед тем как чанк удаляется.

Такой плагин выведет на экран сообщение о том, что нельзя удалять чанк с id=70:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnChunkBeforeRemove':
        if ($chunk->get('id') == 70){
            $response = array(
            	'success' => false,
            	'message' => 'Нельзя удалять чанк: '.$chunk->get('name'),
            	'data' => array(),
            );
            echo $modx->toJSON($response);
            exit;
        }
        break;
}
                
  • core/model/modx/modchunk.class.php (39)
  • Параметры
    • chunk (cсылка на объект modChunk)

Запускается перед тем как чанк сохраняется.

Такой плагин выведет на экран сообщение о том, что у чанка не заполнено поле описание:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnChunkBeforeSave':
        if (!$chunk->get('description')){
            $response = array(
            	'success' => false,
            	'message' => "Голову ты дома не забыл, а про 'Описание' забыл!",
            	'data' => array(),
            );
            echo $modx->toJSON($response);
            exit;
        }
        break;
}
                
  • core/model/modx/modchunk.class.php (80)
  • Параметры
    • chunk (cсылка на объект modChunk)

Запускается после того как чанк удален.

Такой плагин выведет в "Журнал ошибок" массив с параметрами удаленного чанка:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnChunkRemove':
        print_r($chunk->toArray());
        break;
}
                
  • core/model/modx/modchunk.class.php (49)
  • Параметры
    • chunk (cсылка на объект modChunk)

Запускается после того как чанк сохранен.

Такой плагин выведет в "Журнал ошибок" массив с параметрами сохраненного чанка:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnChunkSave':
        print_r($chunk->toArray());
        break;
}
                
  • core/model/modx/modcontext.class.php (329)
  • Параметры
    • context (cсылка на объект modContext)

Запускается перед тем как контекст будет удален.

Такой плагин выведет на экран сообщение о том, что нельзя удалять контекст с ключом test:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnContextBeforeRemove':
        if ($context->get('key') == "test"){
            $response = array(
            	'success' => false,
            	'message' => 'Нельзя удалять! А то голову с плеч!',
            	'data' => array(),
            );
            echo $modx->toJSON($response);
            exit;
        }
        break;
}
                
  • core/model/modx/modcontext.class.php (355)
  • Параметры
    • context (cсылка на объект modContext)
    • mode (либо новый либо обновить, определение)

Запускается перед тем как контекст будет сохранен.

Такой плагин выведет в "Журнал ошибок" массив с параметрами сохраненного контекста, но еслу у него не заполнен description То выведет ошибку на экран:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnContextBeforeSave':
        if (!$context->get('description')){
            $response = array(
            	'success' => false,
            	'message' => 'Заполните поле описание!',
            	'data' => array(),
            );
            echo $modx->toJSON($response);
            exit;
        } else {
            print_r($context->toArray());
        }
        break;
}
                
  • manager/controllers/default/context/update.class.php (100)
  • Параметры
    • key (ключ контекста)
    • context (cсылка на объект modContext)
    • mode (либо новый либо обновить, определение)

Запускается перед тем как загрузится форма редактирования.

Такой плагин подгружает style в head и сделает текст в .x-form-text красным:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnContextFormPrerender':
        $modx->regClientStartupHTMLBlock('
        <style>
        .x-form-text {color: #ff0000;}
        </style>');
        break;
}
                
  • manager/controllers/default/context/update.class.php (113)
  • Параметры
    • key (ключ контекста)
    • context (cсылка на объект modContext)
    • mode (либо новый либо обновить, определение)

Запускается после того как форма редактирования загружена.

Такой плагин добавить имя загруженному контексту:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnContextFormRender':
        //если обновляем существующий
        if ($mode == modSystemEvent::MODE_UPD) {
            $context->set('name','Название');
            //сохраним ему новое имя
            $context->save();
        }
        break;
}
                
  • core/model/modx/modcontext.class.php (338)
  • Параметры
    • context (cсылка на объект modContext)

Запускается после того как контекст удаляется.

Такой плагин добавить в "Журнал ошибок" данные удаленного контекста:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnContextRemove':
        print_r($context->toArray());
        break;
}
                
  • core/model/modx/modcontext.class.php (365)
  • Параметры
    • context (cсылка на объект modContext)
    • mode (либо новый либо обновить, определение)

Запускается каждый раз когда контекст сохраняется.

Такой плагин выведет ошибку на экран если у контекста не заполнено поле name:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnContextSave':
        if ($mode == modSystemEvent::MODE_UPD){
            if (!$context->get('name')){
                $response = array(
                	'success' => false,
                	'message' => 'Не заполнено имя!',
                	'data' => array(),
                );
                echo $modx->toJSON($response);
                exit;
            }
        }
        break;
}
                
  • core/model/modx/processors/resource/emptyrecyclebin.class.php (60)
  • Параметры
    • ids (массив удаленных id ресурсов)
    • num_deleted (количество удаленных ресурсов)

Запускается после того как корзина очищена.

Такой плагин выведет в "Журнал ошибок" сколько и какие ресурсы были удалены:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnEmptyTrash':
        $modx->log(modX::LOG_LEVEL_ERROR, 'Корзина была очищена, удалено ресурсов: '.$num_deleted.' Вот они: ').print_r($ids);
        break;
}
                
  • core/model/modx/sources/mods3mediasource.class.php (662)
  • core/model/modx/sources/modfilemediasource.class.php (748)
  • Параметры
    • files (массив файлов из PHP массива $_files)
    • directory (ссылка на объект modDirectory )
    • source (объект modMediaSource)

Запускается после того как все файлы загружены в диспетчер.

Такой плагин выведет в "Журнал ошибок" какие и куда файлы были загружены:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnFileManagerUpload':
        print_r($files);
        echo 'Файл был загружен сюда: '.$directory;
        break;
}
                
  • core/model/modx/modmanagerrequest.class.php (116)
  • core/model/modx/modrequest.class.php (69)
  • Параметры

Срабатывает в самом начале обработки запроса (request). На данном этапе до версии MODX 2.3 обычно выполняли функции маршрутизации — перенаправляли пользователя на определенную страницу в зависимости от условий (аналогично .htaccess). Сейчас это можно делать в «OnMODXInit» событии. В принципе, большой разницы между этими событиями нет — запускаются они сразу друг за другом. Только «OnMODXInit» запускается в классе modX, а «OnHandleRequest» — в классе modRequest, который загружается сразу же после инициализации MODX.

Такой плагин выведет в "Журнал ошибок" кучу, открываем и смотрим:

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnHandleRequest':
        $request = &$_REQUEST;
        print_r($request);
        break;
}
                
  • core/model/modx/modx.class.php (2370)
  • Параметры
  • core/model/modx/modrequest.class.php (132)
  • Параметры
    • Но к ресурсу можно обратится $modx->resource

Запускается после того как ресурс загружен, но перед тем как будут обработаны все теги.

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnLoadWebDocument':
        // Сделать ресурс некешируемым
        $modx->resource->set('cacheable', 0);
        // Или назначить ему другой шаблон
        $modx->resource->set('template', 6);
        break;
}
                
  • core/model/modx/processors/security/login.class.php (236)
  • Параметры
    • user (ссылка на объект modUser)
    • password (пароль)
    • rememberme (запомнить пользователя, cookie)
    • lifetime (время жизни сессии cookie)
    • loginContext (ключ контекста)
    • addContexts (дополнительные контексты где происходит авторизация)

Запускается перед тем как пользователь авторизуется, и его сессия добавить в менеджер. Это событие используется, чтобы позволить войти

  • manager/controllers/default/security/login.class.php (44)
  • Параметры

Запускается перед тем как форма входа появится для пользователя.

  • core/model/modx/modmanagercontroller.class.php (190)
  • Параметры
    • controller (экземпляр контроллера текущей страницы менеджера)

Запускается в контроллере менеджера после обработки контента, но до того как он появится.

  • core/model/modx/modmanagerrequest.class.php (127)
  • Параметры
    • action (id текущего загруженного действия)

Запускается перед тем как страница загрузится в менеджере.

  • core/model/modx/modx.class.php (1174)
  • Параметры
    • response_code (код ответа для отправки, по умолчанию "HTTP/1.1 404 Not Found")
    • error_type (тип. По умолчанию 404)
    • error_header (заголовок, по умолчанию "HTTP/1.1 404 Not Found")
    • error_pagetitle (pagetitle на странице)
    • error_message (сообщение на странице ошибки)

Запускается когда пользователь попадает на ресурс с несуществующим id.

  • core/model/modx/modx.class.php (1198)
  • Параметры
    • response_code (код ответа для отправки, по умолчанию "HTTP/1.1 401 Unauthorized")
    • error_type (тип. По умолчанию 401)
    • error_header (заголовок, по умолчанию "HTTP/1.1 401 Unauthorized")
    • error_pagetitle (pagetitle на странице)
    • error_message (сообщение на странице ошибки)

Запускается когда пользователь попадает на закрытые страницы к которым у него нет доступа, и пытается их просмотреть.

  • core/model/modx/modparser.class.php (229)
  • core/model/modx/modparser095.class.php (88)
  • Параметры
    • ссылка на контент доступна так $modx->documentOutput

Событие срабатывает для каждого тега MODX, т.е. столько раз, сколько тегов будет на странице. В плагине содержание тега доступно через переменную $content.

  • core/model/modx/modplugin.class.php (70)
  • Параметры
    • plugin (ссылка на объект modPlugin)

Событие срабатывает перед тем как удаляется плагин.

  • core/model/modx/modplugin.class.php (39)
  • Параметры
    • plugin (ссылка на объект modPlugin)

Событие срабатывает перед тем как сохранится плагин.

  • core/model/modx/modplugin.class.php (39)
  • Параметры
    • plugin (ссылка на объект modPlugin)

Событие срабатывает перед тем как сохранится плагин.

  • core/model/modx/modpluginevent.class.php (59)
  • Параметры
    • id (id объекта modPluginEvent)
    • pluginEvent (Ссылка на объект modPluginEvent)

Событие срабатывает после того как плагин отсоединится от события.

  • core/model/modx/processors/element/plugin/remove.class.php (17)
  • Параметры
    • id (id плагина)
    • chunk (ссылка на объект modPlugin)

Событие срабатывает после того как плагин будет удален.

  • manager/controllers/default/element/plugin/create.class.php (78)
  • manager/controllers/default/element/plugin/update.class.php (129)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • id (id плагина. Будет 0 для новых)
    • plugin (ссылка на объект modPlugin. Будет иметь значение NULL для новых плагинов)

Запускается до изменения плагина, но JS подгружается. Можно использовать для визуализации пользовательских JavaScript в mgr.

  • manager/controllers/default/element/plugin/create.class.php (91)
  • manager/controllers/default/element/plugin/update.class.php (143)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • id (id плагина. Будет 0 для новых)
    • plugin (ссылка на объект modPlugin. Будет иметь значение NULL для новых плагинов)

Запускается во время рендеринга формы.

  • core/model/modx/processors/element/plugin/create.class.php (26)
  • core/model/modx/processors/element/plugin/update.class.php (27)
  • Параметры
    • mode (либо новый либо обновить, определение)
    • id (id плагина)
    • plugin (ссылка на объект modPlugin)

Запускается после того, как плагин будет сохранен в менеджере.

  • core/model/modx/modplugin.class.php (79)
  • Параметры
    • plugin (ссылка на объект modPlugin)

Запускается после того, как плагин будет удален.

  • core/model/modx/modplugin.class.php (49)
  • Параметры
    • plugin (ссылка на объект modPlugin)

Запускается после того, как плагин будет сохранен.

  • core/model/modx/modplugin.class.php (49)
  • Параметры
    • plugin (ссылка на объект modPlugin)

Запускается после того, как плагин будет сохранен.

  • core/model/modx/modpropertyset.class.php (218)
  • Параметры
    • propertySet (ссылка на объект modPropertySet)

Запускается перед тем как набор параметров будет удален.

  • core/model/modx/modpropertyset.class.php (192)
  • Параметры
    • propertySet (ссылка на объект modPropertySet)

Запускается перед тем как набор параметров будет сохранен.

  • core/model/modx/modpropertyset.class.php (227)
  • Параметры
    • propertySet (ссылка на объект modPropertySet)

Запускается после того, как набор параметров будет удален.

  • core/model/modx/modpropertyset.class.php (202)
  • Параметры
    • propertySet (ссылка на объект modPropertySet)

Запускается после того, как набор параметров будет сохранен.

  • Параметры
    • group (ссылка на объект modResourceGroup)

Запускается перед тем как группа ресурсов удаляется.

  • core/model/modx/modresourcegroup.class.php (27)
  • Параметры
    • group (ссылка на объект modResourceGroup )

Запускается перед тем как группа ресурсов сохраняется.

  • core/model/modx/modresourcegroup.class.php (63)
  • Параметры
    • group (ссылка на объект modResourceGroup )

Запускается после того как группа ресурсов удаляется.

  • core/model/modx/modresourcegroup.class.php (38)
  • Параметры
    • group (ссылка на объект modResourceGroup )

Запускается после того как группа ресурсов сохраняется.

  • manager/controllers/default/browser/index.class.php (42)
  • Параметры

Используется для обработки MODx.Browser's реализации файловой системы для пользовательских RTEs.

  • core/model/modx/processors/element/tv/renders/web/output/richtext.class.php (22)
  • manager/controllers/default/element/chunk/update.class.php (149)
  • manager/controllers/default/element/chunk/create.class.php (22)
  • manager/controllers/default/resource/resource.class.php (205)
  • manager/controllers/default/element/chunk/create.class.php (86)
  • Параметры
    • editor (указанный редактор)
    • elements (массив элементов RTE)

Может быть использован любой редактор.

  • manager/controllers/default/resource/resource.class.php (197)
  • core/model/modx/processors/system/rte/getlist.class.php (11)
  • Параметры

Срабатывает при выборе любого выпадающего списка редакторов. Например в системных настройках 'which_editor', вродебы

  • manager/controllers/default/system/settings.class.php (43)
  • Параметры

Срабатывает до того, как страница с настройками загрузится.

  • core/model/modx/processors/security/user/activatemultiple.class.php (44)
  • Параметры
  • core/model/modx/moduser.class.php (117)
  • Параметры
    • user (ссылка на объект modUser )

Срабатывает перед тем как пользователь будет удален.

  • core/model/modx/moduser.class.php (91)
  • Параметры
    • user (ссылка на объект modUser)
    • mode (либо новый либо обновить, определение)

Срабатывает перед тем как пользователь будет сохранен.

  • core/model/modx/processors/security/user/delete.class.php (16)
  • Параметры
    • user (ссылка на объект modUser)
    • id (id пользователя)

Срабатывает после того как пользователь будет удален.

  • core/model/modx/processors/security/user/create.class.php (18)
  • core/model/modx/processors/security/user/update.class.php (17)
  • Параметры
    • user (ссылка на объект modUser)
    • id (id пользователя)
    • mode (либо новый либо обновить, определение)

Срабатывает после того как пользователь будет создан и обновлен через форму.

  • core/model/modx/processors/security/login.class.php (105)
  • Параметры
    • username (указанное имя пользователя)
    • password (указанный пароль)
    • attributes (массив параметров)

Срабатывает когда пользователь не найден при авторизации.

  • core/model/modx/moduser.class.php (126)
  • Параметры
    • user (ссылка на объект modUser)

Срабатывает после того как пользователь удален.

  • core/model/modx/moduser.class.php (101)
  • Параметры
    • user (ссылка на объект modUser)
    • mode (либо новый либо обновить, определение)

Срабатывает после того как пользователь сохранен.

  • core/model/modx/processors/security/login.class.php (236)
  • Параметры
    • user (ссылка на объект modUser)
    • password (пароль)
    • rememberme (запомнить пользователя, cookie)
    • lifetime (время жизни сессии cookie)
    • loginContext (ключ контекста)
    • addContexts (дополнительные контексты где происходит авторизация)

Запускается перед тем как пользователь авторизуется, и его сессия добавить в менеджер. Это событие используется, чтобы позволить войти

  • core/model/modx/modx.class.php (2594)
  • Параметры
    • к ресурсу можно обратится $modx->resource.

Это самое последнее событие. Оно срабатывает, когда страница уж отправлена в браузер и подготовленный ресурс сохранен в кэш.

  • core/model/modx/modrequest.class.php (112)
  • Параметры

Срабатывает в конце обработки запроса перед подготовкой ответа. Статус сайта уже определён и идентификатор ресурса (id) найден (он доступен в $modx->resourceIdentifier).

После этого события MODX загружает ресурс и проверяет права доступа к нему для текущего пользователя. И если проверки не прошли, то запускается одно из 2-х следующих событий — «OnPageNotFound» или «OnPageUnauthorized».

  • core/model/modx/modx.class.php (527)
  • Параметры
    • contextKey
    • options

Вызывается при инициализации объекта в modx.

В списке возможны ошибки, по мере использования буду поправлять и дополнять.


Комментарии (3)


  • Дмитрий 24 марта 2018, 19:09(Комментарий был изменён) #
    +1
    Голову ты дома не забыл? А про дескрипшен забыл!
    Зашел освежить память и тут такое… )) с юмором все в порядке Классный метод для запоминайки, продолжай в том же духе!
    • zazazaxza 06 апреля 2018, 01:57 #
      +4
      docs.modx нервно курит в стороне, все разжевано
      • kiukishenkaec 16 мая 2018, 22:51 #
        0
        Согласен!!! Круто написано! Молодец!

        Оставить комментарий Все поля обязательны к заполнению.