ฉันใช้ 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 ที่มีอยู่) ที่มองเห็นได้ในรายการโทเค็นในหน้าต่างแก้ไขหรือไม่