2014-10-24 3 views
0

Я реализовал hook_menu() и вызвал функцию с page_callback в ней.Как передать массив с ключом из hook_menu() в page_callback с помощью page_arguments?

Я могу передать аргументы там, используя определение функции 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 [ «арг»], что я использую правильный элемент для получить мой аргумент (не что-то другое)?

Благодаря

ответ

0

Вы можете использовать "Авто-Loader подстановочных". Дополнительная информация в разделе с тем же названием на странице документации hook_menu: https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7

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