0

我正在尝试创建一个插件,该插件将采用列表框电视的值并将文档的createdby字段设置为匹配该电视的onDocFormSave设置。电视会自动填充所有活跃用户并输出他们的 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;
}
4

3 回答 3

1

未经测试。

看起来也必须对资源进行设置,而不是通过 Modx 类。

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

检查了文档

于 2014-04-22T23:56:06.587 回答
0

如果你省略 $resource->set... 并运行插件,它会通过吗?我想知道您是否可能导致循环,即$resource->set 触发另一个onDocFormSave。您是否有权访问服务器 error.log?它可能包含任何崩溃的内容。

于 2014-04-23T07:17:22.460 回答
0

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 用户的名称和用户 ID 并将它们放置在选择框 TV 中的方法是在 @EVAL 绑定中使用 Peoples 片段:

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

这是一种肮脏而缓慢的做事方式,但已向GitHub提交了将其作为 Modx 资源上的标准字段的请求

于 2014-04-23T22:55:12.643 回答