我正在用drupal构建我的第一个站点。我做了一个自定义用户字段:全名。 现在我想在我的模板中获得这个fild的值来说“你好,%username%”。 我该怎么做?获取Drupal 7模板中自定义用户字段的值?
6
A
回答
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'];
}
然后像这样在page.tpl.php
:
if (isset($full_name) && !empty($full_name)) :
echo 'Hello ' . $full_name;
endif;
注意LANGUAGE_NONE
如果您正在运行多语言网站,则可能需要更改。
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']);
}
}
如果您的站点使用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));
}
0
我知道这个问题被问前一段,但我想发布一个替代方案。看起来你想将$ variables数组中的字段更改为$variables['name']
,这与您在我的field_real_name
调用的自定义字段中的字段相同。如果您正在使用预处理功能,则无需拉入全局对象$user
。您可以访问$variables
阵列,这样你就可以得到该用户的信息 - 这将加载有UID(see 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;
}
}
0
我们可以在模板文件中的任意位置添加下面的代码。
<?php
global $user;
$user = user_load($user->uid);
print $user->name;
?>
相关问题
- 1. 在Drupal自定义模块中获取文本字段的值
- 2. Drupal 7,通过自定义字段值列出用户
- 3. Drupal 7的新的自定义模板
- 4. Drupal 7查看自定义模板
- 5. drupal 7自定义模板不显示
- 6. Drupal 8 - 读取自定义模块中的节点字段值
- 7. Drupal 7 Persensing每个自定义字段
- 8. 自定义字段node_save Drupal 7
- 9. Drupal 7中的自定义webform邮件模板不起作用
- 10. 在模板中的load_node上访问Drupal 7中的字段值
- 11. 在Liferay中获取自定义用户字段值(expando)
- 12. 的Drupal 7分类:查找自定义字段值
- 13. WordPress的获取自定义字段值
- 14. Drupal 7和使用自定义模板的主题()
- 15. 在Drupal 7模板中包含自定义的PHP
- 16. Drupal 7中的自定义主题模板
- 17. Drupal 7自定义字段与多个文件字段
- 18. 获取附件自定义字段值
- 19. 获取Salesforce自定义字段值
- 20. 如何打印自定义值自定义模板在Drupal
- 21. Django:如何使用自定义模板标签动态获取字段值?
- 22. Drupal 7:我如何在自己的块中显示自定义字段值
- 23. 所见即所得的自定义字段中的drupal 7
- 24. 我如何在Drupal 7中制作自定义模板
- 25. Drupal 7 - 模块块与自定义模板不呈现
- 26. drupal 7在html.tpl.php中添加自定义的cck字段头
- 27. 只渲染来自Drupal 7自定义字段的网址
- 28. 如何从drupal 7中的自定义表中获取行?
- 29. Drupal 8:从树枝模板中的禁用字段中获取值
- 30. 在Drupal 7视图中自定义字段中排序3
您应该使用field_get_items。直接访问可以在多语言网站上打破,或者现场结构发生变化。 – gagarine
@gagarine这是很久很久以前。字段结构不能改变FYI,它没有任何机制。 – Clive
这只能在模板或模块中使用吗?当我用'$ account = user_load($ uid);'加载我的用户时,我只得到空数组而不是自定义字段:'$ account-> pwyw_balance'只是一个没有内容的数组()。自定义字段是否需要加载额外的代码?当我使用'$ wrapper = entity_metadata_wrapper('user',$ account) - > value()'加载用户时,会发生同样的事情。 '$ wrapper ['pwyw_balance']'是一个空数组。 – nerdoc