Estou usando o Webform 4. Ele usa os tokens do Drupal, não seus próprios% tokens, como costumava ser na versão 3, e praticamente tudo o que eu encontrei foi sobre o webform 3.
Digamos que eu queira criar um formulário de inscrição com várias páginas. Na primeira página, há apenas um campo de email. No segundo, quero uma marcação que diga algo como:
Configuração detalhada de assinatura para molot@example.com
Da mesma forma, gostaria de poder usá-los como valores padrão para campos futuros, como solicitar ao usuário o endereço de cobrança e o endereço de entrega.
Existem tokens para isso? O que fiz por enquanto é:
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;
}
}
Funciona, mas mostra apenas os valores de uma etapa anterior, por isso requer alguns truques sujos com campos ocultos para transportar o valor do email em várias etapas. Eu admito - foi apenas rápido e sujo. Existe alguma built-in maneira de fazê-lo, ou devidamente mantido contribuiu módulo para isso? Ou uma maneira de fazer esse código funcionar independentemente $_POST['submitted']
, de transportar valores por várias etapas e de tornar seus tokens (dos elementos disponíveis do Webform) visíveis na lista de tokens nas janelas de edição?