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 [email protected]
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?
Jawaban:
Ini tidak menjawab pertanyaan dalam judul Anda, tetapi membaca use case Anda sepertinya skenario yang dibuat untuk Profile2 . Posting stackoverflow terkait
Bentuk web sangat bagus untuk survei dan semacamnya, tetapi ketika Anda ingin "dapat menggunakannya sebagai nilai default untuk bidang di masa mendatang" mereka harus terhubung ke pengguna. Jadi, Anda akan memerlukan lebih banyak kode khusus untuk mengambil pengiriman historis webform pengguna untuk menarik nilai-nilai ini dalam bentuk perubahan untuk alamat penagihan Anda. Profil (2) ditulis tepat untuk mempermudah ini.
Juga, semakin sedikit pengkodean kustom menit terakhir yang Anda lakukan sebelum menyerahkan ini kepada orang lain, semakin sedikit yang orang lain akan mengutuk Anda di dalam hati mereka ketika mereka mencoba untuk membuat pembaruan.
sumber
Dekati variabel sebagai global dan masukkan from_state [values] [] ke dalamnya. Ini bekerja untuk saya, dalam bentuk multi-tahap dengan ctools modal popup.
sumber