Drupal:如何在与表单相同的页面上呈现表单的结果
如何将表单提交的结果打印在与表单本身相同的页面上?
How would I print the results of a form submission on the same page as the form itself?
相关钩子菜单:
$items['admin/content/ncbi_subsites/paths'] = array(
'title' => 'Paths',
'description' => 'Paths for a particular subsite',
'page callback' => 'ncbi_subsites_show_path_page',
'access arguments' => array( 'administer site configuration' ),
'type' => MENU_LOCAL_TASK,
);
页面回调:
function ncbi_subsites_show_path_page() {
$f = drupal_get_form('_ncbi_subsites_show_paths_form');
return $f;
}
表单构建功能:
function _ncbi_subsites_show_paths_form() {
// bunch of code here
$form['subsite'] = array(
'#title' => t('Subsites'),
'#type' => 'select',
'#description' => 'Choose a subsite to get its paths',
'#default_value' => 'Choose a subsite',
'#options'=> $tmp,
);
$form['showthem'] = array(
'#type' => 'submit',
'#value' => 'Show paths',
'#submit' => array( 'ncbi_subsites_show_paths_submit'),
);
return $form;
}
提交函数(为了简洁跳过了验证函数)
Submit function (skipped validate function for brevity)
function ncbi_subsites_show_paths_submit( &$form, &$form_state ) {
//dpm ( $form_state );
$subsite_name = $form_state['values']['subsite'];
$subsite = new Subsite( $subsite_name ); //y own class that I use internally in this module
$paths = $subsite->normalized_paths;
// build list
$list = theme_item_list( $paths );
}
如果我打印那个 $list 变量,它正是我想要的,但我不确定如何将它放入带有从ncbi_subsites_show_path_page"构建的原始表单页面的页面中.非常感谢任何帮助!
If I print that $list variable, it is exactly what I want, but I am not sure how to get it into the page with the original form page built from 'ncbi_subsites_show_path_page'. Any help is much appreciated!
推荐答案
Nikit 发布的链接中的关键信息是 $form_state['rebuild'].以下是 Drupal 7 文档中的一些信息,我认为这些信息同样适用于 Drupal 6...
The key information in the link Nikit posted is $form_state['rebuild']. Here's some info from Drupal 7 documentation that I believe applies the same for Drupal 6...
$form_state['rebuild']: 通常在整个表单处理完成并提交处理程序运行,一个表单是被认为是完成和drupal_redirect_form() 将重定向用户使用 GET 访问新页面请求(因此浏览器刷新不会重新提交表格).然而,如果'rebuild' 已设置为 TRUE,然后表格的新副本立即构建并发送到浏览器;反而的重定向.这用于多步骤形式,例如向导和确认表格.另外,如果一个表格验证处理程序已设置重建"为 TRUE 和验证错误发生,然后重新构建表单在退回之前,启用表格要更改的元素,视情况而定到特定的验证错误.
$form_state['rebuild']: Normally, after the entire form processing is completed and submit handlers ran, a form is considered to be done and drupal_redirect_form() will redirect the user to a new page using a GET request (so a browser refresh does not re-submit the form). However, if 'rebuild' has been set to TRUE, then a new copy of the form is immediately built and sent to the browser; instead of a redirect. This is used for multi-step forms, such as wizards and confirmation forms. Also, if a form validation handler has set 'rebuild' to TRUE and a validation error occurred, then the form is rebuilt prior to being returned, enabling form elements to be altered, as appropriate to the particular validation error.
相关文章