在Drupal 7模板中获取自定义用户字段的值?

Kon*_*nia 7 php user-interface drupal drupal-7 custom-fields

我正在用drupal构建我的第一个站点.我创建了一个自定义用户字段:全名.现在我想在我的模板中获取此fild的值,说"Hello,%username%".我怎么做?

Pie*_*yle 19

克莱夫的答案是正确的,除了你应该field_get_items用来获取字段的值.它将为您处理语言.您还应该清理价值.

function THEME_preprocess_page() {
  global $user;
  $user = user_load($user->uid); // Make sure the user object is fully loaded
  $full_names = field_get_items('user', $user, 'field_full_name');
  if ($full_names) {
    $vars['full_name'] = check_plain($full_names[0]['value']);
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您的站点使用Entity API模块,您还可以使用这样的实体元数据包装器

function THEME_preprocess_page() {
  global $user;
  $user = user_load($user->uid); // Make sure the user object is fully loaded
  $wrapper = entity_metadata_wrapper('user', $user);
  $vars['full_name'] = $wrapper->field_full_name->get(0)->value(array('sanitize' => TRUE));
}
Run Code Online (Sandbox Code Playgroud)

另请参阅在Drupal 7中编写使用字段的健壮代码


Cli*_*ive 11

根据您的设置/字段名称,类似于template.php(模板文件的预处理功能):

function mytheme_preprocess_page() {
  global $user;
  $user = user_load($user->uid); // Make sure the user object is fully loaded

  $vars['full_name'] = $user->field_full_name[LANGUAGE_NONE][0]['value'];
}
Run Code Online (Sandbox Code Playgroud)

然后是这样的事情page.tpl.php:

if (isset($full_name) && !empty($full_name)) :
  echo 'Hello ' . $full_name;
endif;
Run Code Online (Sandbox Code Playgroud)

请注意,LANGUAGE_NONE如果您运行的是多语言网站,则可能需要更改.