Drupal: Form olarak aynı sayfada Formu Sonuçları Render nasıl

4 Cevap php

Nasıl formun kendisi gibi aynı sayfada bir form gönderme sonuçlarını yazdırmak istiyorsunuz?

İlgili hook_menu:

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

sayfa geri arama:

function ncbi_subsites_show_path_page() {
  $f = drupal_get_form('_ncbi_subsites_show_paths_form');
  return $f;
}

Form binası fonksiyonu:

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

Fonksiyonunu Gönder (kısalık için atlanır doğrulamak fonksiyonu)

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

Ben $ liste değişken baskı varsa, ben tam olarak ne istediğini, ama ben 'ncbi_subsites_show_path_page' inşa orijinal form sayfası ile sayfanın içine almak için nasıl emin değilim. Herhangi bir yardım çok takdir!

4 Cevap

NIKIT yayınlanmıştır linkte anahtar bilgisi $ form_state ['yeniden'] olur. İşte Drupal 6 için aynı geçerlidir inanıyorum Drupal 7 belgelerinde bazı bilgiler bulunuyor ...

$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.

Drupal6 node.module ve dblog.module yönetici / içerik / düğüm ve çıktıda işlenen form içeren bir sayfa geri arama sağlayarak admin / reports / DBLog için bunu.

modules/dblog/dblog.admin.inc
dblog_overview()

modules/node/node.admin.inc
node_admin_nodes()

Şeklinde güncellenen filtre ayarları $ _SESSION saklanır gönderin.

Sayfa geri arama o $ _SESSION depolanan filtre ayarlara dayalı sonuçlar vermektedir.

$ _SESSION (Kalıcı bir de olsa) burada sadece başka bir küresel olduğunu.

Drupal7 için ben $form_state['rebuild'] kullanırsanız, daha sonra form değişkenleri iyi PHP süper global değişken erişilebilir olduğunu bulmak $_POST (veya $_REQUEST). Kullanmak Ancak, $form_state['redirect'] ile çözüm $_SESSION (yerine $_GET veya $_REQUEST kullanarak) daha iyidir.

Hatta uzmanlar için bu sorun oldukça zor buluyorum. Belki Drupal biz bilmiyoruz biraz daha kolay ve sezgisel bir yol var.