You are here

20 特殊的,预定义的加载参数

admin 的头像
Submitted by admin on 星期二, 2015-06-02 03:06

作者:老葛,北京亚艾元软件有限责任公司,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类别下的对应信息提取出来。


Drupal版本: