Estoy usando Webform 4. Utiliza los tokens de Drupal, no sus propios tokens% como solía hacerlo en la versión 3, y casi todo lo que encontré fue sobre el formulario web 3.
Digamos que quiero hacer un formulario de suscripción de varias páginas. En la primera página solo hay un campo de correo electrónico. En el segundo, quiero un marcado que diga algo como:
Configuración de suscripción detallada para [email protected]
Del mismo modo, me gustaría poder usarlos como valores predeterminados para futuros campos, como pedirle al usuario la dirección de facturación y luego la dirección de entrega.
¿Hay alguna ficha para eso? Lo que hice por ahora es:
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, pero solo muestra valores de un paso anterior, por lo que requiere algunos trucos sucios con campos ocultos para llevar el valor del correo electrónico a través de múltiples pasos. Lo admito, fue rápido y sucio. ¿Hay alguna forma integrada de hacerlo, o un módulo contribuido mantenido adecuadamente para esto? ¿O una forma de hacer que este código funcione de manera independiente $_POST['submitted']
, para que lleve valores a través de muchos pasos y hacer que sus tokens (de los elementos de formulario web disponibles) sean visibles en la lista de tokens en las ventanas de edición?
Respuestas:
Esto no responde a la pregunta en su título, pero leer su caso de uso suena como el escenario para el que se escribió Profile2 . Publicación relacionada de stackoverflow
Webform es ideal para encuestas y demás, pero cuando desea "poder usarlos como valores predeterminados para campos futuros", deben estar conectados al usuario. Por lo tanto, necesitaría más código personalizado para obtener el envío histórico del formulario web del usuario para extraer estos valores en un formulario diferente para su dirección de facturación. El perfil (2) está escrito precisamente para facilitar esto.
Además, cuanto menos codificación personalizada de última hora esté haciendo antes de pasar esto a otra persona, menos será que alguien más lo maldecirá en su corazón cuando intente realizar actualizaciones.
fuente
Calcule las variables como globales y pase from_state [values] [] a ellas. Esto funcionó para mí, en formas de etapas múltiples con ventana emergente modal de ctools.
fuente