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 [email protected]
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?
Respostas:
Isso não responde à pergunta em seu título, mas a leitura do seu caso de uso parece o cenário para o qual o Profile2 foi escrito. Post relacionado do stackoverflow
O Webform é ótimo para pesquisas e tal, mas quando você deseja "poder usá-los como valores padrão para campos futuros", eles precisam estar conectados ao usuário. Portanto, você precisaria de mais código personalizado para buscar o envio do formulário da web histórico do usuário para extrair esses valores de uma forma alterada para o seu endereço de cobrança. O perfil (2) foi escrito precisamente para facilitar isso.
Além disso, quanto menos codificação personalizada de última hora você estiver fazendo antes de entregá-la a mais alguém, menos alguém mais o amaldiçoará quando estiver tentando fazer atualizações.
fonte
Decalre as variáveis como globais e passe de_state [values] [] para elas. Isso funcionou para mim, em formulários de vários estágios com o pop-up modal do ctools.
fonte