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

时间:2014-12-11 17:13:58

标签: php modx

基本上我希望TV(a.k.a. Template Variable)的值默认为用户扩展字段的值。我尝试使用以下内容制作名为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)时,值会立即默认为表单加载。谁能告诉我怎么做呢?

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

可能有两种解决方案:将模板变量值设置为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]]`]]