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 [email protected]
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?
Odpowiedzi:
To nie odpowiada na pytanie w twoim tytule, ale czytanie twojego przypadku użycia brzmi jak scenariusz, dla którego napisano Profile2 . Powiązany post stackoverflow
Formularz internetowy świetnie nadaje się do ankiet i tym podobnych, ale jeśli chcesz „móc używać ich jako wartości domyślnych dla przyszłych pól”, musisz połączyć się z użytkownikiem. Potrzebowałbyś więc więcej niestandardowego kodu, aby pobrać historyczne przesłanie formularza internetowego użytkownika, aby pobrać te wartości w formularzu zmiany adresu rozliczeniowego. Profil (2) został napisany właśnie w celu ułatwienia.
Ponadto, im mniej niestandardowe kodowanie robisz w ostatniej chwili, zanim przekażesz je komuś innemu, tym mniej ktoś inny przeklnie cię w swoim sercu, gdy będzie próbował dokonać aktualizacji.
źródło
Odkalibruj zmienne jako globalne i przekaż do nich from_state [wartości] []. To działało dla mnie, w wieloetapowych formach z modalnym okienkiem Ctools.
źródło