基本上,我希望电视的值(又名模板变量)默认为用户扩展字段的值。我尝试制作一个名为 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]]`]]