我正在尝试创建一个插件,该插件将采用列表框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资源上标准字段的请求