По сути, я хочу, чтобы значение 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
) значение сразу устанавливается по умолчанию при загрузке формы. Может кто-нибудь сказать мне, как это должно быть сделано?
Заранее спасибо!
Это невозможно, как вы пытаетесь это. Значение по умолчанию рассчитывается во время рендеринга переменной шаблона, а не при сохранении ресурса, только щелчок по значению по умолчанию поможет, как вы упоминали выше.
Возможны два решения: установить значение переменной шаблона на значение в плагине, работающем на 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, который использует значение созданного или отредактированного в качестве параметра 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]]`]]
Других решений пока нет …