如果需要向加载函数传递额外的参数,那么可以使用load arguments键来定义它们。下面是来自节点模块的例子:一个用来查看节点修订本的菜单项。在这里需要向加载函数,也就是node_load(),传递节点ID和修订本的ID。
$items['node/%node/revisions/%/view'] = array(
'title' => 'Revisions',
'load arguments' => array(3),
'page callback' => 'node_show',
'page arguments' => array(1, NULL, TRUE),
'type' => MENU_CALLBACK,
);
菜单项为load arguments键指定了array(3)。这意味着,除了节点ID通配符的值会自动传递给加载函数以外,还会向加载函数传递一个额外的参数。因为array(3)里面有个元素,也就是整数3;我们在“使用通配符的值”一节中已经讲过,这意味着将会使用路径中的部分3。位置和路径参数的示例URL http://example.com/?q=node/56/revisions/4/view,如表4-2所示。
表 4-2.当查看页面http://example.com/?q=node/56/revisions/4/view时,Drupal路径node/%node/revisions/%/view的位置和参数
位置 参数 来自URL的值
0 node node
1 %node 56
2 revisions revisions
3 % 4
4 view view
因此,定义了load arguments键,这就意味着将会调用node_load('56', '4'),而不是node_load('56')了。
当页面回调运行时,加载函数会将'56'替换为加载了的节点对象,所以页面回调将会是node_show($node, NULL, TRUE)。
老葛的Drupal培训班 Think in Drupal