Я знаю, что этот вопрос задавали довольно давно, но я хотел опубликовать альтернативу. Похоже, что вы хотите изменить поле в массиве $ variable, равное $variables['name']
, на то, что вы имеете в своем настраиваемом поле, которое я назвал field_real_name
. Если вы используете функцию предварительной обработки, нет необходимости использовать глобальный объект $user
. У вас есть доступ к массиву $variables
, так что вы можете получить информацию о пользователе с этим - он загрузит информацию, связанную с uid ( см. Template_preprocess_username ):
function mythemename_preprocess_username(&$variables) {
$account = user_load($variables['account']->uid);
...more code will go here in a moment
}
Если вы dpm($account)
(или kpr($account)
, если вы не используете devel), вы увидите, что у вас есть доступ ко всей пользовательской информации, без использования глобального объекта $user
.
Затем вы можете изменить вывод $variables['name']
на ваш field_real_name
следующим образом:
function mythemename_preprocess_username(&$variables) {
// Load user information with user fields
$account = user_load($variables['account']->uid);
// See if user has real_name set, if so use that as the name instead
$real_name = $account->field_real_name[LANGUAGE_NONE][0]['safe_value'];
if (isset($real_name)) {
$variables['name'] = $real_name;
}
}