Come accedere ai valori dai passaggi precedenti in Webform multipagina?


12

Sto usando Webform 4. Usa i token di Drupal, non i suoi token% come una volta nella versione 3, e praticamente tutto quello che ho trovato riguardava il webform 3.

Di 'che voglio fare un modulo di iscrizione multi-pagina. Nella prima pagina c'è solo un campo e-mail. Sul secondo, voglio un markup che dirà qualcosa di simile:

Configurazione dettagliata dell'abbonamento per molot@example.com

Allo stesso modo, vorrei essere in grado di usarli come valori predefiniti per i campi futuri, come chiedere all'utente l'indirizzo di fatturazione e quindi l'indirizzo di consegna.

Ci sono dei token per quello? Quello che ho fatto per ora è:

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;
  }
}

Funziona, ma mostra solo i valori di un passaggio precedente, quindi richiede alcuni trucchi sporchi con campi nascosti per trasportare il valore dell'email attraverso più passaggi. Lo ammetto: è stato solo veloce e sporco. Esiste un modo integrato per farlo o un modulo fornito correttamente gestito per questo? O un modo per far funzionare questo codice in modo indipendente $_POST['submitted'], per far sì che porti valori attraverso molti passaggi e per renderlo visibile (dagli elementi Webform disponibili) nell'elenco dei token nelle finestre di modifica?


È possibile impostare una variabile di sessione quando si invia la pagina con il valore desiderato su di essa?
Darvanen,

@Darvanen forse potrei, ma il valore è già stato salvato da qualche parte, giusto? Quindi preferirei usare ciò che è già lì. E difficilmente credo di essere il primo a averne bisogno. Probabilmente non sono riuscito a trovare la soluzione che è là fuori?
Mołot,

Non sono sicuro di questo $ form_state ['storage'] ma ho cercato 2 o 3 post in cui hanno menzionato tutti i dati memorizzati in $ form_state ['storage'], quindi penso che tu possa accedere ai dati, fonte stackoverflow.com/questions/ 6408170 /… e drupal.org/node/717750
Bala

2
@Bala funziona perfettamente in tutte le forme di hook hook. Ma come posso ottenere lo stato di forma nei token? Voglio dire, lascerò questo lavoro tra due settimane. Il ragazzo che si prenderà cura di questo modulo non è un programmatore, può farlo ma non è la sua abilità principale - ecco perché ho bisogno di token.
Mołot,

Sì, hai menzionato per esigenze future che ho dimenticato completamente.
Bala,

Risposte:


1

Questo non risponde alla domanda nel titolo, ma leggendo il tuo caso d'uso sembra lo scenario per cui Profile2 è stato scritto. Post relativo allo stackoverflow

Webform è ottimo per sondaggi e simili, ma quando si desidera "essere in grado di usarli come valori predefiniti per campi futuri" devono essere collegati all'utente. Quindi avresti bisogno di più codice personalizzato per recuperare l'invio storico del modulo web dell'utente per estrarre questi valori in una modifica del modulo per il tuo indirizzo di fatturazione. Il profilo (2) è stato scritto proprio per renderlo più semplice.

Inoltre, meno codice personalizzato dell'ultimo minuto stai facendo prima di passare questo a qualcun altro, tanto meno che qualcun altro ti maledirà nel loro cuore quando stanno cercando di fare aggiornamenti.


Tutto bene e bello, ma una cosa che questo modulo non era è un profilo :( Voglio dire, non volevamo creare profili per le persone che chiedevano abbonamenti. Quando lo fai, si applicano leggi diverse, più rigide. O almeno così detto dal dipartimento legale. Inoltre, ora ne ho bisogno per casi d'uso totalmente non correlati, se non del tutto :)
Mołot

Ok, è interessante quello che ha detto il tuo team legale. In conclusione, se si desidera prepopolare i moduli con i dati connessi all'utente, è necessario disporre dei dati connessi all'utente. Il modulo Profile era un modo più semplice per mantenere quella capacità di dati e una corrispondenza abbastanza stretta per le funzioni che stavi richiedendo. Modifica le autorizzazioni del sito in modo che nessuno possa visualizzare i profili e ora è lo stesso di quello che desideri ma con un codice più standard. Solo perché il modulo si chiama Profile non significa che debba essere distribuito come tale.
DeveloperWeeks

0

Decalcomanda le variabili come globali e passa da_state [valori] [] a esse. Questo ha funzionato per me, in forme multi-fase con popup modale ctools.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.