Modx插件:将资源的createdby设置为匹配电视值



我正在尝试创建一个插件,该插件将采用列表框TV的值,并将文档的createdby字段设置为与该TV在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;
}

未测试。

看起来设置也必须在资源上完成,而不是通过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用户的名称和用户id并将其放置在selectbox TV中的方法是在@EVAL绑定中使用Peoples片段:

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

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

最新更新