作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
如果没有在菜单项中定义标题回调的话,Drupal将默认使用t()函数。我们也可以使用title callback键,明确地定义这个回调函数:
function menu_abc_menu() {
$items['menu_abc'] = array(
'title' => '菜单ABC',
'title callback' => 't',
'description' => '一个简单的菜单项.',
'page callback' => 'menu_abc_callback_page',
'file' => 'menu_abc.pages.inc',
'access callback' => 'user_access',
'access arguments' => array('access abc'),
'weight' => 10,
'menu_name' => 'main-menu',
);
return $items;
}
注意 不管title callback键的值如何,description键总是使用t()函数来翻译的。描述在这里没有对应的回调函数键。
如果我们把标题回调改为自己的函数,那会是什么样子呢?让我们先看看吧:
/**
* 实现 hook_menu().
*/
function menu_abc_menu() {
$items['menu_abc'] = array(
'title' => '菜单ABC',
'title callback' => 'menu_abc_my_title',
'description' => '一个简单的菜单项.',
'page callback' => 'menu_abc_callback_page',
'file' => 'menu_abc.pages.inc',
'access callback' => 'user_access',
'access arguments' => array('access abc'),
'weight' => 10,
'menu_name' => 'main-menu',
);
return $items;
}
/**
* 页面回调.
*/
function menu_abc_my_title(){
global $user;
$title = $user->name.t('的主页');
return $title;
}
如图3-7所示,通过使用一个自定义的标题回调,就可以实现,在运行时设置菜单项标题了。
图 3-7.标题回调设定了菜单项的标题
但是,如果菜单项的标题和页面标题不一样时,那该怎么办呢?这个实现起来也不难,我们可以使用drupal_set_title()来单独的设置页面标题:
function menu_abc_my_title(){
global $user;
drupal_set_title(t('菜单ABC标题'));
$title = $user->name.t('的主页');
return $title;
}
这样就将页面标题和菜单项的标题分离了开来,如图3-8所示。
图 3-8. 将菜单项的标题和页面标题独立开来