Używam Webform 4. Używa tokenów Drupala, a nie własnych% tokenów, tak jak to miało miejsce w wersji 3, i prawie wszystko, co znalazłem, dotyczyło Webform 3.
Powiedz, że chcę utworzyć wielostronicowy formularz subskrypcji. Na pierwszej stronie jest tylko pole e-mail. Po drugie, chcę znaczników, które powiedzą coś takiego:
Szczegółowa konfiguracja subskrypcji dla molot@example.com
Podobnie chciałbym móc używać ich jako wartości domyślnych dla przyszłych pól, takich jak pytanie użytkownika o adres rozliczeniowy, a następnie o adres dostawy.
Czy są na to jakieś tokeny? Na razie zrobiłem:
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;
}
}
Działa, ale pokazuje wartości tylko z jednego kroku wcześniej, więc wymaga kilku brudnych sztuczek z ukrytymi polami, aby przenosić wartość e-mail na wiele kroków. Przyznaję - było po prostu szybkie i brudne. Czy jest jakiś wbudowany sposób, aby to zrobić, lub odpowiednio utrzymany w tym celu moduł? Lub sposób, aby ten kod działał niezależnie $_POST['submitted']
, aby przenosił wartości przez wiele kroków i aby jego tokeny (z dostępnych elementów formularza internetowego) były widoczne na liście tokenów w oknach edycji?