Drupal:如何在与表单相同的页面上呈现表单的结果

2021-12-29 00:00:00 forms php drupal drupal-fapi drupal-6

如何将表单提交的结果打印在与表单本身相同的页面上?

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.

相关文章