Модульный плагин: Установите для созданного ресурса значение соответствия телевизору
Я пытаюсь создать плагин, который будет принимать значение списка ТВ и установить поле созданного документа в соответствии с настройкой этого телевизора на 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.