如何将登录用户的您的帐户指定给/ user / [uid]页面的标题更改为欢迎[用户名] ,其中< em> [用户名] 是当前登录用户的用户名?
答案 0 :(得分:2)
在调用hook_menu之后,将保存的数据更改为{menu_router}表。
代码示例:
function MYMODULE_menu_alter()
{
global $user;
if($user->uid != 0)
$items['user']['title'] = 'Welcome ' . $user->name;
}
答案 1 :(得分:1)
答案 2 :(得分:0)
请注意,对于Drupal 7.23,user.module包含一个“标题回调”,用于确定用户是否已登录,并使用相应的标题进行回复。
适合我的代码(通过主题模板,而不是自定义模块):
function YOURTHEME_menu_alter(&$items) {
$items['user']['title callback'] = 'YOURTHEME_user_menu_title';
}
function YOURTHEME_user_menu_title() {
global $user;
return user_is_logged_in() ? t($user->name) : t('User account');
}
答案 3 :(得分:0)
String Overrides模块应该可以轻松实现。
答案 4 :(得分:0)
在Drupal 7中,hook_menu()
和hook_menu_alter()
仅在需要刷新有关从模块实现的路由的数据时(例如,启用,禁用,安装或卸载模块时)才被调用。在标题中使用当前登录用户名的hook_menu_alter()
实现将为不同用户显示相同的用户名。
与此不同,每次呈现与该路由关联的页面时,都会调用与该路由关联的标题回调。
正确的代码将类似于以下代码。
function mymodule_menu_alter(&$items) {
$items['user']['title callback'] = 'mymodule_user_profile_title';
}
function mymodule_user_profile_title() {
global $user;
return user_is_logged_in() ? t('Welcome, @name', array('@name' => format_username($user))) : t('User account');
}
请注意,t()
的第一个参数必须是文字字符串,而不是t($user->name)
中的动态值,因为包含字符串翻译的数据库表将不包含用于网站。
这也是错误的,因为显示的用户名对于网站上使用的语言是不变的:例如,在意大利网站中,像 Albert 这样的用户名不会翻译为 Alberto , Vincent 也不会翻译为 Vincenzo 。
在用户界面中显示用户名时,始终最好使用format_username()
,它允许第三方模块更改显示为用户名的内容。 (例如,一个模块可以显示用户字段的内容,而不显示登录用户名。)
如果您不愿意编写自定义代码,则可以使用String Overrides模块。如果您不想仅使用任何模块来更改用户个人资料页面的标题,则可以在用于网站的settings.php文件中添加以下代码。
$conf['locale_custom_strings_en'][''] = array(
'My account' => 'Welcome to my site'
);
请注意,使用 String Overrides 模块或在settings.php文件中添加$conf['locale_custom_strings_en']['']
数组,您将无法:
后一种情况可能是赞成也可能是反对。如果需要更改的字符串足够通用,那么即使不需要更改也将被替换。