Answers:
我将在/programming/8124089/get-value-of-custom-user-field-in-drupal-7-template中重新发布我的答案,因为我认为这是一种替代解决方案。本示例说明如何使用诸如field_real_name之类的名称代替默认用户名。
如果使用预处理功能,则无需拉入全局$user
对象。您可以将$ variables数组中的字段更改为$variables['name']
您在自定义字段中所拥有的名称field_real_name
。您有权访问该$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;
}
}
出于某些奇怪的原因,Drupal 7中的配置文件字段不再像以前那样。但是,用户概要文件对象使其他概要文件字段可以作为数组元素进行访问。例如:
$profile->field_fieldname['und'][0]['value']
不可用,但按以下方式重写将可以正常工作:
$user_profile['field_fieldname']['#object']->field_fieldname['und'][0]['value'];
因此,我只是在代码中执行了以下操作:
/*
* Create simplified variables as shortcuts for all fields.
* Use these variables for read access lateron.
*/
$firstname = $user_profile['field_first_name']['#object']
->field_first_name['und'][0]['value'];
$middlename = $user_profile['field_middle_name']['#object']
->field_middle_name['und'][0]['value'];
$surname = $user_profile['field_surname']['#object']
->field_surname['und'][0]['value'];
$image = $user_profile['field_user_picture']['#object']
->field_user_picture['und'][0]['uri'];
这是使事情工作的另一种方式,而不是$user
再次调用该对象。
您可以使用Drupal 7内核加载用户数据(包括自定义字段)
$user = entity_load($entity_type = "user", $ids = Array($user->uid), $conditions = array(), $reset = FALSE);
在Drupal 7> API>实体加载中有更多详细信息