作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
有两个特殊的加载参数。%map令牌将当前Drupal路径作为数组进行传递。在前面的例子中,如果%map作为一个加载参数传递过来的话,那么其值就为array('node', '12', 'revisions', '29', 'view')。如果加载函数的参数是通过引用传递的话,那么加载函数可以修改%map中对应的值。%index令牌在加载函数中指的是通配符的位置。对于前面的例子,由于通配符的位置为1,如表4-2所示,所以该令牌的值就为1。
例如,在modules/user/user.module中,有这样的菜单项:
$items['user/%user_category/edit/' . $category['name']] = array(
'title callback' => 'check_plain',
'title arguments' => array($category['title']),
'page callback' => 'drupal_get_form',
'page arguments' => array('user_profile_form', 1, 3),
'access callback' => isset($category['access callback']) ? $category['access callback'] : 'user_edit_access',
'access arguments' => isset($category['access arguments']) ? $category['access arguments'] : array(1),
'type' => MENU_LOCAL_TASK,
'weight' => $category['weight'],
'load arguments' => array('%map', '%index'),
'tab_parent' => 'user/%/edit',
'file' => 'user.pages.inc',
);
它对应的加载函数就是user_category_load($uid, &$map, $index)。这个菜单项向加载函数传递了参数array('%map', '%index')。如果用户通过路径'user/32/edit/foo'来编辑类别为foo的帐户信息,此时将会调用user_category_load函数,它的第一个参数的值为32,第2个参数的值为('user', 32, 'edit', 'foo'),第3个参数的值为1(也就是通配符所在的索引位置,注意是从0算起的)。user_category_load就会根据这些信息,把foo类别下的对应信息提取出来。