Drupal hook_menu实现中的可选参数

时间:2012-06-19 08:13:58

标签: drupal drupal-7 drupal-routes

如何将drupal菜单项中的一个页面参数设置为可选页面参数?

我有

$items['activities_list/%/%']=array(
'title callback' => 'activities_list_title',
'title arguments' =>array(1),
'description' =>'All the Indicators divided by Coutry',
'page callback' => 'activities_list',
'access arguments' => array('access ppi'),
'page arguments' => array(1,2)
); 

如果我在没有第三个参数的情况下调用activities_list / 76,我将收到一个找不到页面的错误。如何将第三个参数设置为可选参数?

谢谢!

2 个答案:

答案 0 :(得分:20)

比你想象的要容易:)。不要在路径中设置任何参数,只需将它们传递给“页面回调”函数。

$items['activities_list']=array(
  'title callback' => 'activities_list_title',
  'description' =>'All the Indicators divided by Coutry',
  'page callback' => 'activities_list',
  'access arguments' => array('access ppi'),
);

页面回调函数如下所示:

function activities_list($arg1, $arg2)
{
    // Your code goes here...
    drupal_set_title(activities_list_title($arg1, $arg2));
}

您可以使用以下代码更改页面标题。 (未经测试,如果有效,请告诉我):

function activities_list_title($arg_1, $arg_2)
{
    $title = "";
    // Your code goes here
    return $title;
}

希望这有帮助......穆罕默德。

答案 1 :(得分:5)

我认为你不能。如果您只使用一个通配符执行此操作:

$items['activities_list/%']=array(
  'title callback' => 'activities_list_title',
  'title arguments' =>array(1),
  'description' =>'All the Indicators divided by Coutry',
  'page callback' => 'activities_list',
  'access arguments' => array('access ppi'),
  'page arguments' => array(1,2)
);

这将适用于 activities_list / foo 这样的网址,但是如果你有一个像 activities_list / foo / bar 这样的网址,你仍然可以获得<页面回调中的strong> bar ,因为它仍然通过'page arguments'=&gt;传递给该函数阵列(1,2)

或者您可以在页面回调中使用 arg(2)来调用它。