2010-04-14 124 views
1

我正在寫一個自定義模塊,我想在另一個非form API函數 - > custom_facet_view_build()中使用$ form_state當前窗體。

任何幫助表示讚賞:)

<?php 
/** 
* Implementation of hook_perm(). 
*/ 
function custom_facet_perm() { 
    return array(
    'access foo content', 
    'access baz content', 
); 
} 

/** 
* Implementation of hook_menu(). 
*/ 
function custom_facet_menu() { 
    $items['faceted-search'] = array(
    'title' => 'Faceted Search', 
    'page callback' => 'drupal_get_form', 
    'access arguments' => array(), 
); 

    $items['facet-search-test'] = array(
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('custom_facet_form'), 
    'access callback' => TRUE, 
    'type'    => MENU_CALLBACK, 
); 

    return $items; 
} 

/** 
* Form definition; ahah_helper_demo form. 
*/ 
function custom_facet_form($form_state) { 
    $form = array(); 

    ahah_helper_register($form, $form_state); 

    if (isset($form_state['storage']['categories'])) { 
    $categories_default_value = $form_state['storage']['categories']["#value"]; 
    } 

    $form['facet_search_form'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Faceted Search'), 
    '#prefix' => '<div id="billing-info-wrapper">', // This is our wrapper div. 
    '#suffix' => '</div>', 
    '#tree' => TRUE, // Don't forget to set #tree! 
); 

    $form['facet_search_form']['categories'] = array(
    '#type' => 'select', 
    '#title' => t('Category'), 
    '#options' => _custom_facet_taxonomy_query(1), 
    '#multiple' => TRUE, 
    '#default_value' => $categories_default_value, 
); 

    $form['save'] = array(
    '#type' => 'submit', 
    '#value' => t('Save'), 
); 

    return $form; 
} 

/** 
* Validate callback for the form. 
*/ 
function custom_facet_form_validate($form, &$form_state) { 

} 

/** 
* Submit callback for the form. 
*/ 
function custom_facet_form_submit($form, &$form_state) { 
    drupal_set_message('nothing done'); 
    $form_state['storage']['categories'] = $form['facet_search_form']['categories']; 
    // dpm($form_state); // There's a value returned in form_state['storage] within this function 
} 

/** 
* Implementation of hook_views_api(). 
*/ 
function custom_facet_views_api() { 
    return array(
    'api' => 2, 
); 
} 

function custom_facet_view_build(&$view) { 
    dpm($form_state); // form_state['storage] remains NULL even though there's a value on previous submission 
} 

回答

1

PHP函數都沒有意識到,在其他功能有什麼變數。

如果在相同的請求週期中調用函數,則可以將$ form_state變量存儲在全局變量中。否則你需要將變量存儲在數據庫中。這是HTTP的痛苦,這是一個無國籍的系統。

+0

googletorp,感謝您的回答。我最終定義了一個全局變量。 – logii 2010-04-16 13:43:37

+0

我經常使用靜態類對象,這使您在命名全局變量和特定於站點的功能時更加自由。它還可以避免在需要訪問的每個函數中使用'global $ whatever'。 – artfulrobot 2012-03-23 18:27:07

0

試試這個:

$form_state = form_state_defaults(); 
$form_build_id = $_POST['form_build_id']; 
// Get the form from the cache. 
$form = form_get_cache($form_build_id, $form_state); 

,或者通過提供表格ID:

學分:https://drupal.stackexchange.com/questions/158408/how-do-i-load-the-form-state-for-a-form-loaded-with-drupal-get-form/175884#175884

// Get the form. 
$form = drupal_get_form('my_form_id'); 
// Get the default form state. 
$form_state = form_state_defaults(); 
// Get the form and form state from the cache for the form you just got. 
form_get_cache($form['#build_id'], $form_state);