基本上我希望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
)时,值会立即默认为表单加载。谁能告诉我怎么做呢?
提前致谢!
答案 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]]`]]