Установка значения по умолчанию для расширенного поля пользователя в Modx

По сути, я хочу, чтобы значение TV (переменная шаблона) по умолчанию равнялось значению расширенного поля пользователя. Я попытался сделать фрагмент по имени 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 ответ

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

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