Бабушкин Артур - robomozg.ru
Бабушкин Артур 03 марта 2018
robomozg

Плагины и события (Events) в MODX

Создаем новый плагин (имя придумываете сами), отмечаем нужные события и в путь

OnBeforeCacheUpdate Запускается перед обновлением кэша.
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;
}
OnBeforeChunkFormDelete Запускается перед удалением чанка.
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;
}
OnBeforeChunkFormSave Запускается после отправки формы, но перед тем как сохранить чанк.
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;
}
OnBeforeDocFormDelete Запускается перед удалением ресурса.
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;
}
OnChunkFormPrerender Запускается до изменения чанка, но JS подгружается.
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 в новых чанках)
Такой плагин подгружает style в head и сделает текст в .x-form-text красным:
$eventName = $modx->event->name;
switch($eventName) {
    case 'OnChunkFormPrerender':
        $modx->regClientStartupHTMLBlock('
        ');
        break;
}
OnChunkFormRender Запускается во время рендеринга. Можно впихнуть HTML прямиком в форму.
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 в новых чанках)
Такой плагин добавить контент чанку и сохранит его:
$eventName = $modx->event->name;
switch($eventName) {
    case 'OnChunkFormRender':
        //если обновляем существующий
        if ($mode == modSystemEvent::MODE_UPD) {
            //добавили контент чанка
            $chunk->setContent('

Контент чанка

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

Контент новый

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

Контент новый

'); $chunk->set('name','NewChunkName'); $chunk->set('description','Описание'); //можно сразу сохранить новый контент $chunk->save(); } break; }
OnChunkFormSave Запускается после сохранения.
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;
}
OnDocFormDelete Запускается после удаления ресурса.
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 .= '
'.$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; }
OnDocFormPrerender Запускается перед тем как форма редактирования загрузится.
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;
}
                
2000 – 2018 © Robomozg
Яндекс.Метрика