Как передать массив с ключами из hook_menu() в обратный вызов страницы, используя page_arguments?

Я реализовал hook_menu() и вызвал функцию с page_callback.

Я могу передать аргументы там, используя определение функции bla_form($var). Когда я перезвоню return drupal_get_form('bla_node_form', $new_node, $project_id) Я получаю свой $ var в $form_state['args'][1],

Если я пройду array(4) я получил $form_state['args'][1],

Если я пройду array('project_id' => 4) я получил $form_state['args'][1]['project_id'],

Я хотел бы получить $form_state['args']['project_id'],

ПРИМЕР:

function form_example_menu () {
  $items['node/add/bla/project/%'] = array(
    'page callback' => '_bla_form',
    'page arguments' => array(4),//This is where I want to pass a keyed array!!!
    'access callback' => TRUE,
  );
  return $items;
}
function _bla_form ($project_id = array()) {
  module_load_include('inc', 'node', 'node.pages');
  $new_node = new stdClass;
  $new_node->type = 'bla';
  $new_node->language = LANGUAGE_NONE;
  return drupal_get_form('bla_node_form', $new_node, $project_id);
}

В качестве обходного пути: если я не могу сделать это таким образом: как я могу убедиться, что, читая $form_state['args'], я использую соответствующий элемент для получения своего аргумента (а не какой-то другой)?

Спасибо

1 ответ

Вы можете использовать "Подстановочные знаки автозагрузчика". Больше информации в разделе с тем же именем на странице документации hook_menu: https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7

Затем на вашем пути вы можете использовать "%project" вместо простого "%", а затем создать функцию "project_load($project_id)", которая будет возвращать нужный массив. Тогда этот массив будет тем, который вы получите в первом параметре обратного вызова вашей страницы.

Другие вопросы по тегам