Модульный плагин: Установите для созданного ресурса значение соответствия телевизору

Я пытаюсь создать плагин, который будет принимать значение списка ТВ и установить поле созданного документа в соответствии с настройкой этого телевизора на DocFormSave. Телевизор автоматически заполняется всеми активными пользователями и выводит их ID.

У меня есть следующий код для плагина, но когда я пытаюсь сохранить любой ресурс, он просто зависает и никогда не сохраняет. setCreatedBy - это имя списка TV:

switch ($modx->event->name) {
    case 'onDocFormSave':

        $created_by = $resource->getTVValue('setCreatedBy')

        if ($resource->get('createdby') != $created_by) {  
            $modx->resource->set('createdby', $created_by));
        }
    break;
}

3 ответа

Непроверенные.

Похоже, что настройка также должна выполняться на ресурсе, а не через класс Modx.

$resource->set('createdby', $created_by); // You also have a ) too much in your code.

Проверил документы.

Если вы пропустите $resource->set... и запустите плагин, он пройдет? Мне интересно, если вы могли бы вызвать цикл, то есть $ resource-> set вызывает другой onDocFormSave. Есть ли у вас доступ к серверу error.log? Это, вероятно, содержит то, что терпит крах.

Те, кто находился на форумах Modx, смогли мне помочь.

switch ($modx->event->name) {
case 'OnDocFormSave':

    $created_by = $resource->getTVValue('setCreatedBy');

    if (!empty($created_by) && $resource->get('createdby') != $created_by) {
        $resource->set('createdby', $created_by);
        $resource->save();
    }
break;}

Для справки, способ, которым я обработал сбор имен и идентификаторов пользователей Modx и размещение их в телевизоре selectbox, заключался в использовании фрагмента Peoples в привязке @EVAL:

@EVAL return $modx->runSnippet('Peoples',array('tpl'=>'peoplesTpl','outputSeparator'=>'||','active'=>'1'));

Это мелкий грязный и медленный способ сделать что-то, но на GitHub был отправлен запрос на то, чтобы это было стандартное поле на ресурсах Modx.

Другие вопросы по тегам