Как передать массив с ключами из 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)", которая будет возвращать нужный массив. Тогда этот массив будет тем, который вы получите в первом параметре обратного вызова вашей страницы.