Jump to main content Jump to doc navigation

Событие: OnDocFormSave

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

Служба: 1 - Parser Service Events Группа: Documents

TVs Лучше всего модифицировать здесь Если вам нужно изменить значения TV, лучше изменить их здесь, а не во время OnBeforeDocFormSave.

В отличие от OnBeforeDocFormSave, это событие не поддерживает метод $modx->event->output().

Параметры события

Имя Описание
mode Either 'new' or 'upd', depending on the circumstances.
resource Ссылка на объект modResource.
id The ID of the Resource (even for new resources)

Примеры

Чтобы сделать что-то с идентификатором страницы (например, чтобы обновить связанную пользовательскую таблицу), вы можете прочитать это из объекта $resource (даже если вы создаете новый ресурс):

// Log all available properties of the $resource
$modx->log(MODX_LOG_LEVEL_ERROR, print_r($resource->toArray(),true) );
// Get the page id
$page_id = $resource->get('id');
// or simply
$page_id = $id;

if ($mode == 'new') {
    // resource created
}
else {
   // existing resource was updated
}

Все, что вы вернете из этого события, будет записано в журналы, например,

return "Help I'm a bug!";

Результатом будет сообщение журнала, подобное следующему:

 [2012-06-22 13:00:28] (ERROR @ /connectors/resource/index.php) [OnDocFormSave]Help I'm a bug!

Вычисление значения TV

switch ($modx->event->name) {

        // Documents
        case 'OnDocFormSave':
            if ($resource->get('template') == 8) {  
                if(!$resource->setTVValue('my_tv', 'Some Value')) {
                    $modx->log(modX::LOG_LEVEL_ERROR, 'There was a problem setting the TV value.');
                }
            }

        break;
}

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

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

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

<?php
$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.

Автоматическое сохранение Нет необходимости запускать $resource->save() метод, так как это происходит автоматически.

Смотри также