在 Modx 中将默认值设置为用户扩展字段


Setting default value to user extended field in Modx

基本上,我希望电视的值(又名模板变量)默认为用户扩展字段的值。我尝试制作一个名为 get_author 的内容片段:

$user = $modx->getUser();
if (!$user) return '';
    $profile = $user->getOne('Profile');
if (!$profile) return '';
    $extended = $profile->get('extended');
return(isset($extended['author_page'])) ? $extended['author_page'] : '';

并将以下代码添加到电视的默认值属性中:

@EVAL return $modx->runSnippet('get_author');

看起来代码本身有效,但在用户单击管理器中的"设置为默认值"按钮之前,该值不会默认为所需的值。但是当我填写像 8 这样的静态值时(所以没有@eval),该值在表单加载时立即默认。谁能告诉我必须如何做到这一点?

提前感谢!

是不可能的,你尝试这个的方式。默认值是在渲染模板变量期间计算的,而不是在保存资源期间计算的,如上所述,只有单击设置为默认值才会有所帮助。

有两种解决方案:将模板变量值设置为在OnDocFormSave上运行的插件中的值

$user = $modx->getUser());
($user) {
  $profile = $user->getOne('Profile');
  if ($profile) {
    $extended = $profile->get('extended');
    if (isset($extended['author_page'])) {
      $resource->setTVValue('my_tv', $extended['author_page']);
    }
  }
}

或者在代码片段"AuthorPage"中运行代码,该代码段使用 createdby 或 editedby 的值作为 userId 参数。

$output = '';
$userId = $modx->getOption('userId', $scriptProperties, 0);
$user = $modx->getUser($userId);
($user) {
  $profile = $user->getOne('Profile');
  if ($profile) {
    $extended = $profile->get('extended');
    if (isset($extended['author_page'])) {
      $output = $extended['author_page'];
    }
  }
}
return $output;

像这样调用该代码段:

[[AuthorPage? &userId=`[[*createdby]]`]]