วิธีเข้าถึงค่าจากขั้นตอนก่อนหน้าใน Webform หลายหน้า


12

ฉันใช้ Webform 4 มันใช้โทเค็นของ Drupal ไม่ใช่ของตัวเอง% โทเค็นเหมือนที่เคยเป็นในเวอร์ชัน 3 และทุกสิ่งที่ฉันพบก็เกี่ยวกับเว็บฟอร์ม 3

สมมติว่าฉันต้องการสร้างแบบฟอร์มสมัครสมาชิกหลายหน้า ในหน้าแรกจะมีเพียงฟิลด์อีเมล ในวินาทีที่ฉันต้องการมาร์กอัปที่จะพูดบางสิ่งเช่น:

การกำหนดค่าการสมัครรับข้อมูลโดยละเอียดสำหรับ molot@example.com

ในทำนองเดียวกันฉันต้องการที่จะใช้เป็นค่าเริ่มต้นสำหรับฟิลด์ในอนาคตเช่นขอให้ผู้ใช้ที่อยู่สำหรับการเรียกเก็บเงินและที่อยู่จัดส่ง

มีโทเค็นสำหรับสิ่งนั้นหรือไม่? สิ่งที่ฉันทำตอนนี้คือ:

function mymodule_token_info() {
  $type = array(
    'name' => t('Webform submitted values'),
    'description' => t('Tokens related to $_POST[\'submitted\'].'),
  );
  $tokens = array();
  if(isset($_POST['submitted'])) {
    foreach($_POST['submitted'] as $key => $val) { //discard $val now
      $tokens[$key] = array(
        'name' => $key,
        'description' => "\$_POST['submitted']['$key']",
      );
    }
  }
  return array(
    'types' => array('webform_submitted' => $type),
    'tokens' => array('webform_submitted' => $tokens),
  );
}

function mymodule_tokens($type, $tokens, $data, $options) {
  if($type == 'webform_submitted') {
    $replacements = array();
    foreach ($tokens as $name => $original) {
      //Hide errors below. We don't care if it really exists yet. If empty, so be it.
      @$replacements[$original] = (string)$_POST['submitted'][$name];
    }
    return $replacements;
  }
}

ใช้งานได้ แต่จะแสดงเฉพาะค่าจากหนึ่งขั้นตอนก่อนหน้านี้ดังนั้นจึงต้องมีลูกเล่นสกปรกที่มีเขตข้อมูลที่ซ่อนอยู่เพื่อดำเนินการค่าอีเมลในหลายขั้นตอน ฉันยอมรับ - มันเร็วและสกปรก มีวิธีการใด ๆในตัวที่จะทำมันหรือโมดูลบำรุงรักษาสนับสนุนอย่างถูกต้องสำหรับเรื่องนี้? หรือวิธีที่จะทำให้โค้ดนี้ทำงานอย่างอิสระ$_POST['submitted']เพื่อให้มันมีค่าในหลาย ๆ ขั้นตอนและทำให้เป็นโทเค็น (จากองค์ประกอบ Webform ที่มีอยู่) ที่มองเห็นได้ในรายการโทเค็นในหน้าต่างแก้ไขหรือไม่


คุณสามารถตั้งค่าตัวแปรเซสชันเมื่อคุณส่งหน้าเว็บด้วยค่าที่ต้องการได้หรือไม่?
Darvanen

@ Darvanen อาจเป็นไปได้ แต่ค่าจะถูกบันทึกไว้ที่ไหนสักแห่งใช่ไหม? ดังนั้นฉันต้องการใช้สิ่งที่มีอยู่แล้ว และฉันแทบจะไม่เชื่อว่าฉันเป็นคนแรกที่ต้องการสิ่งนี้ อาจเป็นไปได้ว่าฉันไม่พบวิธีแก้ไขปัญหา
Mołot

ฉันไม่แน่ใจเกี่ยวกับ $ form_state ['storage'] แต่ฉันค้นหา 2 หรือ 3 โพสต์พวกเขาพูดถึงข้อมูลทั้งหมดที่เก็บไว้ใน $ form_state ['storage'] ดังนั้นฉันคิดว่าคุณสามารถเข้าถึงข้อมูลแหล่งstackoverflow.com/questions/ 6408170 / …และdrupal.org/node/717750
Bala

2
@Bala นี้ใช้งานได้ในทุกรูปแบบแก้ไขเบ็ดขวา แต่ฉันจะขอสถานะเป็นโทเค็นได้อย่างไร ฉันหมายความว่าฉันเลิกงานนี้ในสองสัปดาห์ คนที่จะดูแลแบบฟอร์มนี้ไม่ใช่ coder เขาสามารถทำได้ แต่นั่นไม่ใช่ทักษะหลักของเขา - นั่นเป็นเหตุผลที่ฉันต้องใช้โทเค็น
Mołot

ใช่คุณพูดถึงความต้องการในอนาคตฉันลืมไปโดยสิ้นเชิง
บาลา

คำตอบ:


1

สิ่งนี้ไม่ตอบคำถามในชื่อเรื่องของคุณ แต่อ่านกรณีการใช้งานของคุณดูเหมือนว่าสถานการณ์ที่Profile2เขียนขึ้น โพสต์ stackoverflow ที่เกี่ยวข้อง

Webform เหมาะสำหรับการสำรวจและเช่นนั้น แต่เมื่อคุณต้องการ "เพื่อให้สามารถใช้พวกเขาเป็นค่าเริ่มต้นสำหรับเขตข้อมูลในอนาคต" พวกเขาจะต้องเชื่อมต่อกับผู้ใช้ ดังนั้นคุณจะต้องใช้รหัสที่กำหนดเองเพิ่มเติมเพื่อดึงข้อมูลการส่งประวัติเว็บฟอร์มของผู้ใช้เพื่อดึงค่าเหล่านี้ในรูปแบบการเปลี่ยนแปลงสำหรับที่อยู่การเรียกเก็บเงินของคุณ มีการเขียนโปรไฟล์ (2) อย่างแม่นยำเพื่อให้ง่ายขึ้น

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


ทั้งหมดดีและดี แต่สิ่งหนึ่งที่แบบฟอร์มนี้ไม่ได้เป็นโปรไฟล์ :( ฉันหมายความว่าเราไม่ต้องการสร้างโปรไฟล์สำหรับผู้ที่ต้องการสมัครสมาชิกกฎหมายที่แตกต่างกันจะมีผลบังคับใช้เมื่อคุณทำได้เข้มงวดมากขึ้น บอกตามแผนกกฎหมายนอกจากนี้ตอนนี้ผมจำเป็นต้องใช้สำหรับกรณีการใช้งานที่ไม่เกี่ยวข้องกันโดยสิ้นเชิงถ้า :) ทั้งหมด.
MOLOT

โอเคนั่นน่าสนใจที่ทีมกฎหมายของคุณพูด บรรทัดล่างถ้าคุณต้องการเติมแบบฟอร์มด้วยข้อมูลที่เชื่อมต่อกับผู้ใช้คุณต้องการข้อมูลที่เชื่อมต่อกับผู้ใช้ โมดูลโปรไฟล์เป็นวิธีที่ง่ายกว่าในการรักษาความสามารถของข้อมูลและการจับคู่ที่ใกล้ชิดกับฟังก์ชั่นที่คุณร้องขอ เปลี่ยนการอนุญาตไซต์เพื่อให้ไม่มีใครสามารถดูโปรไฟล์ได้และตอนนี้มันก็เหมือนกับที่คุณต้องการ แต่ด้วยรหัสมาตรฐานที่มากขึ้น เพียงเพราะโมดูลชื่อ Profile ไม่ได้หมายความว่าจะต้องมีการปรับใช้เช่น
DeveloperWeeks

0

รูปลอกตัวแปรเป็นโกลบอลและส่งผ่าน from_state [values] [] ลงในตัวแปรเหล่านั้น สิ่งนี้ใช้ได้กับฉันในรูปแบบหลายขั้นตอนด้วยป๊อปอัป ctools โมดัล

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