Saya menggunakan Webform 4. Ini menggunakan token Drupal, bukan token itu sendiri seperti dulu di versi 3, dan hampir semua yang saya temukan tentang webform 3.
Katakanlah saya ingin membuat formulir berlangganan multi-halaman. Di halaman pertama hanya ada bidang email. Yang kedua, saya ingin markup yang akan mengatakan sesuatu seperti:
Konfigurasi berlangganan terperinci untuk molot@example.com
Demikian pula, saya ingin dapat menggunakannya sebagai nilai default untuk bidang yang akan datang, seperti meminta pengguna untuk alamat penagihan, dan kemudian untuk alamat pengiriman.
Apakah ada token untuk itu? Apa yang saya lakukan untuk saat ini adalah:
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;
}
}
Ini berfungsi, tetapi hanya menunjukkan nilai dari satu langkah sebelumnya, jadi memerlukan beberapa trik kotor dengan bidang tersembunyi untuk membawa nilai email di beberapa langkah. Saya akui - itu cepat dan kotor. Apakah ada built-in cara untuk melakukannya, atau benar dipelihara kontribusi modul untuk ini? Atau cara untuk membuat kode ini bekerja secara independen $_POST['submitted']
, untuk membuatnya membawa nilai di banyak langkah dan membuatnya token (dari elemen Webform yang tersedia) terlihat pada daftar token di jendela edit?