8定义标题回调

作者:老葛,北京亚艾元软件有限责任公司,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所示,通过使用一个自定义的标题回调,就可以实现,在运行时设置菜单项标题了。

1.png

                图 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所示。

2.png 

                 图 3-8将菜单项的标题和页面标题独立开来


Drupal版本: