2010-04-14 2 views
1

J'écris un module personnalisé et j'aimerais utiliser $ form_state du formulaire courant dans une autre fonction api non-formulaire -> custom_facet_view_build().

toute aide est appréciée :)

<?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 
} 

Répondre

1

fonctions PHP ne sont pas conscients de ce que les variables qui sont dans d'autres fonctions.

Si les fonctions sont appelées dans le même cycle de requête, vous pouvez stocker la variable $ form_state dans une variable globale. Sinon, vous devrez stocker la variable dans la base de données. C'est la peine de HTTP, qui est un système sans état.

+0

googletorp, merci pour la réponse. J'ai fini par définir une variable globale. – logii

+0

J'utilise souvent un objet de classe statique, ce qui vous donne un peu plus de liberté pour nommer vos variables globales et vos fonctions spécifiques au site. Cela vous évite également d'avoir à utiliser 'global $ quelquechose 'dans chaque fonction qui a besoin d'un accès. – artfulrobot

0

Essayez ceci:

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

ou en fournissant la forme id:

crédits: 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); 
Questions connexes