ฉันจะพิมพ์ผลหลังจากส่งแบบฟอร์ม Drupal ได้อย่างไร


9

ฉันมีการตั้งค่าโมดูล Drupal ง่าย ๆ ซึ่งมีกล่องข้อความเดียว

ฉันสามารถคืนสิ่งที่พิมพ์ในกล่องข้อความโดยใช้drupal_set_message():

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

อย่างไรก็ตามecho $username;จะไม่ทำงานสำหรับฉันไม่มีอะไรถูกพิมพ์ออกมา ฉันจะส่งคืนผลลัพธ์โดยdrupal_set_message()ไม่ใช้ได้อย่างไร

คำตอบ:


7

วิธีปกติในการจัดการสิ่งนี้คือการนำเวิร์กโฟลว์หลายขั้นตอนมาใช้ ดูdrupal_rebuild_form()ข้อมูลเพิ่มเติม แต่โดยพื้นฐานแล้วคุณตั้งค่าไว้$form_state['rebuild'] = TRUE;ในตัวจัดการการส่งและในฟังก์ชั่นรูปแบบดั้งเดิมให้เพิ่มการตรวจสอบเพื่อดูว่าแบบฟอร์มนั้นถูกส่งหรือไม่ ถ้ามีคุณสามารถเข้าถึงค่าที่ส่งและสามารถจัดการแบบฟอร์มตามที่เห็นสมควร

ตัวอย่างพื้นฐานมาก:

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

ตัวจัดการการส่งแบบฟอร์มสามารถพิมพ์ข้อความโดยใช้drupal_set_message()หรือเขียนข้อความในบันทึกด้วยwatchdog()เท่านั้น

ทางเลือกคือการบันทึกข้อมูลที่จำเป็นในเซสชั่นและเปลี่ยนเส้นทางผู้ใช้ (ใช้$form_state['redirect'] = 'page path';) ไปยังหน้าเว็บที่เนื้อหาของเซสชั่นจะปรากฏ

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

ตามบันทึกด้านข้างอาร์กิวเมนต์แรกของt()ต้องเป็นสตริงตัวอักษรไม่ใช่สตริงที่ได้รับการต่อสองสตริงเช่นเดียวกับในกรณีของคุณ คุณควรใช้ตัวยึดตำแหน่งตามรหัสต่อไปนี้

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

ใน Drupal 7 แทนที่จะส่งคืนสตริงคุณสามารถส่งคืนอาร์เรย์การเรนเดอร์ได้


1

ข้อมูลที่ส่งทั้งหมดถูกเก็บไว้ใน$form_stateถ้าคุณต้องการที่จะเห็นสิ่งที่เกิดขึ้นโมดูลการติดตั้งdevelและหลังจากที่คุณสามารถทำเช่นนี้:

ภายในของ firstmodule_form1_submitฟังก์ชั่นการพิมพ์ทั้งหมดอาร์เรย์$form_stateประเภท - dpm($form_state)- และคุณจะเห็นการส่งออกที่ u สามารถหาชื่อผู้ใช้ช่องของคุณหรืออื่น ๆ จะได้รับบางสิ่งบางอย่างที่คล้ายกันนี้$form_state['values']['username']

จากนั้นคุณก็สามารถพิมพ์มันได้ drupal_set_message(t($form_state['values']['username']);


ขอบคุณฉันมีส่วนนั้น แต่ drupal_set_message ส่งคืนเป็นสิ่งที่ "ข้อความช่วยเหลือ" ฉันต้องการคืนเนื้อหาจำนวนมากบนหน้านั้น
h00j

0

สิ่งที่คุณต้องทำคือมีเมนูเรียกกลับโดยทั่วไปจะเป็นหน้าที่คุณตั้งค่าและแสดงข้อมูลบน

สามารถดูข้อมูลเพิ่มเติมได้ที่นี่: http://api.drupal.org/api/drupal/includes!menu.inc/group/menu/7และคุณต้องอ่านเพิ่มเติมเกี่ยวกับ hook_menu ()

หวังว่าจะช่วยบอกฉันถ้าคุณต้องการตัวอย่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.