Необязательный аргумент в реализации Drupal hook_menu

Как я могу установить один из аргументов страницы в моем пункте меню 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)
); 

Если я вызову activity_list/76, например, без третьего аргумента, я получу ошибку «Страница не найдена». Как я могу установить третий параметр как необязательный?

Спасибо!


person perpetual_dream    schedule 19.06.2012    source источник


Ответы (2)


Это проще, чем вы думаете :). Не устанавливайте никаких аргументов в своем пути и просто передайте их в функцию «обратный вызов страницы».

$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;
}

Надеюсь, это поможет... Мухаммад.

person Muhammad Reda    schedule 19.06.2012
comment
Спасибо, это сработало. У меня проблема, что аргумент title больше не работает. - person perpetual_dream; 20.06.2012
comment
Добавлено решение для чем. Пожалуйста, попробуйте и дайте мне знать, если это сработало. - person Muhammad Reda; 20.06.2012
comment
Это вызовет предупреждение, если вы не передадите аргумент функции обратного вызова. - person jlcharette; 22.11.2017

Я не думаю, что вы можете. Если вы сделали это вместо этого только с одним подстановочным знаком:

$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)
);

Затем это будет работать для URL-адреса, такого как activities_list/foo, но если у вас был такой URL-адрес, как activities_list/foo/bar, вы все равно можете получить значение bar в обратном вызове страницы, так как он по-прежнему передается этой функции с помощью 'page arguments' => array(1,2).

Или же вы можете вызвать его, используя arg(2) в обратном вызове вашей страницы.

person Web Assistant    schedule 19.06.2012