Ich verwende Webform 4. Es werden Drupal-Token verwendet, keine eigenen% -Token wie in Version 3, und so ziemlich alles, was ich gefunden habe, befasste sich mit Webform 3.
Angenommen, ich möchte ein mehrseitiges Anmeldeformular erstellen. Auf der ersten Seite gibt es nur ein E-Mail-Feld. In der zweiten möchte ich ein Markup, das ungefähr so aussieht:
Detaillierte Abonnementkonfiguration für [email protected]
Ebenso möchte ich sie als Standardwerte für zukünftige Felder verwenden können, z. B. Benutzer nach der Rechnungsadresse und dann nach der Lieferadresse fragen.
Gibt es dafür Token? Was ich jetzt gemacht habe ist:
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;
}
}
Es funktioniert, zeigt jedoch nur Werte aus einem Schritt zuvor an. Daher sind einige schmutzige Tricks mit ausgeblendeten Feldern erforderlich, um den E-Mail-Wert über mehrere Schritte zu übertragen. Ich gebe zu - es war nur schnell und dreckig. Gibt es eine eingebaute Möglichkeit, dies zu tun, oder ein ordnungsgemäß gewartetes Modul , das dazu beigetragen hat? Oder eine Möglichkeit, diesen Code unabhängig $_POST['submitted']
zu machen, Werte in mehreren Schritten zu übertragen und seine Token (aus verfügbaren Webform-Elementen) in der Token-Liste in Bearbeitungsfenstern sichtbar zu machen?
Antworten:
Dies beantwortet nicht die Frage in Ihrem Titel, aber wenn Sie Ihren Anwendungsfall lesen, klingt es wie das Szenario, für das Profile2 geschrieben wurde. Verwandte Stackoverflow-Post
Webform eignet sich hervorragend für Umfragen und ähnliches. Wenn Sie sie jedoch als Standardwerte für zukünftige Felder verwenden möchten, müssen Sie mit dem Benutzer verbunden sein. Sie benötigen dann mehr benutzerdefinierten Code, um die historische Webformularübermittlung des Benutzers abzurufen und diese Werte in einer Formularänderung für Ihre Rechnungsadresse abzurufen. Profil (2) ist genau geschrieben, um dies zu vereinfachen.
Je weniger benutzerdefinierte Codierungen Sie in letzter Minute vornehmen, bevor Sie diese an eine andere Person weitergeben, desto weniger wird Sie eine andere Person in ihrem Herzen verfluchen, wenn sie versucht, Aktualisierungen vorzunehmen.
quelle
Dekalieren Sie die Variablen als global und übergeben Sie from_state [values] [] an sie. Dies funktionierte für mich in mehrstufigen Formularen mit ctools modal popup.
quelle