我正在编写一个自定义模块,我想在另一个非形式的api函数中使用当前表单的$ form_state - > custom_facet_view_build()。
感谢任何帮助:)
<?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
}
答案 0 :(得分:2)
PHP函数不知道其他函数中的变量。
如果在同一个请求周期中调用这些函数,则可以将$ form_state变量存储在全局变量中。否则,您需要将变量存储在db中。这就是HTTP的痛苦,这是一个无国籍系统。
答案 1 :(得分:1)
试试这个:
$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:
// 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);