Установка значения по умолчанию для расширенного поля пользователя в 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) значение сразу устанавливается по умолчанию при загрузке формы. Может кто-нибудь сказать мне, как это должно быть сделано?

Заранее спасибо!

2

Решение

Это невозможно, как вы пытаетесь это. Значение по умолчанию рассчитывается во время рендеринга переменной шаблона, а не при сохранении ресурса, только щелчок по значению по умолчанию поможет, как вы упоминали выше.

Возможны два решения: установить значение переменной шаблона на значение в плагине, работающем на 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]]`]]
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]