Drupal hook_menu实现中的可选参数

per*_*eam 12 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)
); 
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Muh*_*eda 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'),
);
Run Code Online (Sandbox Code Playgroud)

页面回调函数看起来像这样:

function activities_list($arg1, $arg2)
{
    // Your code goes here...
    drupal_set_title(activities_list_title($arg1, $arg2));
}
Run Code Online (Sandbox Code Playgroud)

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

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

希望这有助于......穆罕默德.


Web*_*ant 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)
);
Run Code Online (Sandbox Code Playgroud)

这将适用于像activities_list/foo这样的URL ,但如果你有一个像activities_list/foo/bar这样的URL,你仍然可以在页面回调中获得bar的值,因为它仍然通过'page arguments'传递给该函数=>数组(1,2).

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