Drupal formu gönderdikten sonra sonuçları nasıl yazdırabilirim?


9

Tek bir metin kutusu olan basit bir Drupal Modülü kurulum var.

Ne kullanarak metin kutusuna yazılan döndürebilirsiniz drupal_set_message():

function firstmodule_form1_submit($form, &$form_state) {
    drupal_set_message(t("The user is $username"));
}

Ancak echo $username;benim için çalışmaz, hiçbir şey yazdırılmaz. Sonuçları kullanmadan nasıl iade edebilirim drupal_set_message()?

Yanıtlar:


7

Bunu yapmanın normal yolu çok adımlı bir iş akışı uygulamaktır. Daha drupal_rebuild_form()fazla bilgi için bakın , ancak temel olarak $form_state['rebuild'] = TRUE;gönderme işleyicinize ayarladınız ve orijinal form işlevine formun gönderilip gönderilmediğini kontrol edin. Varsa, gönderilen değerlere erişiminiz vardır ve formu uygun gördüğünüz şekilde değiştirebilirsiniz.

Çok temel bir örnek:

function MYMODULE_some_form($form, &$form_state) {
  // If the form has been submitted, output something related to the submission
  if (!empty($form_state['values']['some_field'])) {
    $form['submission'] = array(
      '#markup' => function_to_get_markup_from_value($form_state['values']['some_field'])
    );
  }
  else {
    // Otherwise build the normal form
    $form['some_field'] = array(
      '#type' => 'textfield',
      // ...
    );
  }

  return $form;
}

function MYMODULE_some_form_submit($form, &$form_state) {
  $form_state['rebuild'] = TRUE;
}

2

Form gönderme işleyicisi yalnızca drupal_set_message()günlüğü kullanarak veya kullanarak günlüğe bir ileti yazabilir watchdog().

Alternatif olarak, oturumda gerekli verileri kaydetmek ve kullanıcıyı (kullanarak $form_state['redirect'] = 'page path';) oturumun içeriğinin gösterildiği bir sayfaya yönlendirmektir .

function firstmodule_menu() {
  $items['the path for your page'] = array(
    'page callback' => 'firstmodule_show_submitted_data';
    // ...
  );

  return $items;
}

function firstmodule_form1_submit($form, &$form_state) {
  $_SESSION['firstmodule_username'] = $username;
  // ...

  $form_state['redirect'] = 'the path for your page';
}

function firstmodule_show_submitted_data() {
  // Populate $result with the string to show.

  return $result;
}

Yan not olarak, ilk argümanı t()sizin durumunuzda olduğu gibi iki dizeyi birleştiren elde edilen bir dize değil, değişmez bir dize olmalıdır. Aşağıdaki kodda olduğu gibi yer tutucuları kullanmalısınız.

drupal_set_message(t("The user is %username", array('%username' => $username)));

Drupal 7'de, bir dize döndürmek yerine, bir oluşturma dizisi döndürebilirsiniz .


1

Gönderilen tüm veriler $form_state, ne olduğunu görmek istiyorsanız devel modülünü yükleyin ve her zaman böyle yapabilirsiniz:

firstmodule_form1_submitTüm dizi $form_statetürünü yazdırma işlevinizin içinde - dpm($form_state)- ve metin kutusu kullanıcı adınızı veya başka herhangi birini bulabileceğiniz çıktıyı göreceksiniz, buna benzer bir şey olacak$form_state['values']['username']

Ve sonra yazdırabilirsiniz drupal_set_message(t($form_state['values']['username']);


Teşekkürler, ben bu bölümü var ancak drupal_set_message bir "Yardım Mesajı" türü şey olarak döndürür. Sayfanın kendisinde çok fazla içerik döndürmek istiyorum.
h00j

0

Yapmanız gereken şey, temel olarak ayarladığınız ve bilgileri görüntülediğiniz bir sayfa olacak bir menü geri aramasına sahip olmaktır.

Daha fazla bilgiye buradan ulaşabilirsiniz: http://api.drupal.org/api/drupal/includes!menu.inc/group/menu/7 ve hook_menu () hakkında daha fazla bilgi edinmeniz gerekiyor

Umarım yardımcı olur, bir örneğe ihtiyacınız olup olmadığını söyle.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.