J'utilise Webform 4. Il utilise les jetons de Drupal, pas ses propres jetons% comme dans la version 3, et à peu près tout ce que j'ai trouvé concernait le Webform 3.
Dites que je veux faire un formulaire d'abonnement de plusieurs pages. Sur la première page, il n'y a qu'un champ email. Sur le second, je veux un balisage qui dira quelque chose comme:
Configuration détaillée de l'abonnement pour [email protected]
De même, j'aimerais pouvoir les utiliser comme valeurs par défaut pour les futurs champs, comme demander à l'utilisateur l'adresse de facturation, puis l'adresse de livraison.
Y a-t-il des jetons pour cela? Ce que j'ai fait pour l'instant, c'est:
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;
}
}
Cela fonctionne, mais il n'affiche que les valeurs d'une étape précédente, il nécessite donc quelques astuces avec des champs masqués pour transporter la valeur de l'e-mail sur plusieurs étapes. J'avoue - c'était juste rapide et sale. Existe-t-il un moyen intégré de le faire ou un module de contribution correctement entretenu pour cela? Ou un moyen de faire fonctionner ce code indépendamment $_POST['submitted']
, de lui faire porter des valeurs sur plusieurs étapes et de rendre ses jetons (à partir des éléments de formulaire Web disponibles) visibles sur la liste de jetons dans les fenêtres d'édition?
Réponses:
Cela ne répond pas à la question dans votre titre, mais en lisant votre cas d'utilisation, cela ressemble au scénario pour lequel Profile2 a été écrit. Article de stackoverflow associé
Le formulaire Web est idéal pour les enquêtes et autres, mais lorsque vous voulez "pouvoir les utiliser comme valeurs par défaut pour les futurs champs", ils doivent être connectés à l'utilisateur. Vous auriez donc besoin de plus de code personnalisé pour récupérer la soumission de formulaire Web historique de l'utilisateur afin d'extraire ces valeurs sous une forme différente de votre adresse de facturation. Le profil (2) est écrit précisément pour faciliter cela.
De plus, moins vous effectuez de codage personnalisé de dernière minute avant de le transmettre à quelqu'un d'autre, moins que quelqu'un d'autre vous maudit dans son cœur lorsqu'il essaie de faire des mises à jour.
la source
Décalez les variables comme globales et transmettez from_state [valeurs] [] en elles. Cela a fonctionné pour moi, sous des formes multi-étapes avec popup modal ctools.
la source