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

Php 在Modx中将默认值设置为用户扩展字段,php,modx,Php,Modx,基本上,我希望TV(也称为模板变量)的值默认为用户扩展字段的值。我尝试制作一个名为get\u author的片段,内容如下: $user = $modx->getUser(); if (!$user) return ''; $profile = $user->getOne('Profile'); if (!$profile) return ''; $extended = $profile->get('extended'); return(isset($exten

基本上,我希望TV(也称为模板变量)的值默认为用户扩展字段的值。我尝试制作一个名为
get\u 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'] : '';
并将以下代码添加到TV的默认值属性:

@EVAL return $modx->runSnippet('get_author');
看起来代码本身可以工作,但是在用户单击管理器中的“设置为默认值”按钮之前,该值不会默认为所需的值。但是,当我填写一个静态值,如
8
(因此没有
@eval
),该值在表单加载时立即默认。有人能告诉我怎么做吗


提前谢谢

这是不可能的,你这样做是不可能的。默认值是在呈现模板变量的过程中计算的,而不是在保存资源的过程中计算的,只有单击set to default(设置为默认值)才会有帮助,正如您上面提到的那样

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

或者在使用createdby或editedby值作为userId参数的代码段“AuthorPage”中运行代码

$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]]`]]

不知道你说的“TV”是什么意思。这是Modx对模板变量的俚语;)有趣。我明天会调查的
[[AuthorPage? &userId=`[[*createdby]]`]]