Çok sayfalı Web formunda önceki adımlardan değerlere nasıl erişilir?


12

Webform 4 kullanıyorum. Drupal'ın jetonlarını kullanıyor, sürüm 3'te olduğu gibi kendi% jetonları değil ve bulduğum hemen hemen tüm webform 3'le ilgiliydi.

Çok sayfalı abonelik formu oluşturmak istediğimi varsayalım. İlk sayfada sadece bir e-posta alanı var. İkincisi, şöyle bir şey söyleyecek bir biçimlendirme istiyorum:

Molot@example.com için ayrıntılı abonelik yapılandırması

Benzer şekilde, bunları gelecekteki alanlar için varsayılan değer olarak kullanabilmek isterim. Kullanıcıdan fatura adresi ve ardından teslimat adresi için istemek gibi.

Bunun için jeton var mı? Şimdilik ne yaptım:

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

Çalışır, ancak yalnızca bir adım önceki değerleri gösterir, bu nedenle e-posta değerini birden çok adımda taşımak için gizli alanlara sahip bazı kirli numaralar gerektirir. Kabul ediyorum - sadece hızlı ve kirli. Herhangi var mı dahili bunu yapmak için yolu olarak veya düzgün katkıda sürdürdü bunun için modül? Veya bu kodu bağımsız olarak çalıştırabilmenin $_POST['submitted'], birçok adımda değerler taşımasını ve (kullanılabilir Webform öğelerinden) jetonlarını düzenleme pencerelerinde jeton listesinde görünür kılmanın bir yolu mu?


İstediğiniz değere sahip sayfayı gönderdiğinizde bir oturum değişkeni ayarlayabilir misiniz?
Darvanen

@Darvanen muhtemelen yapabilirdim, ama değer zaten bir yere kaydedilmiş, değil mi? Bu yüzden zaten orada olanı kullanmayı tercih ederim. Buna ilk ihtiyaç duyduğuma inanmıyorum. Muhtemelen orada çözüm bulamadım?
Mołot

Bu $ form_state ['storage'] hakkında emin değilim ama $ form_state ['storage'] içinde depolanan tüm verilerden bahsettikleri 2 veya 3 gönderiyi aradım, böylece verilere erişebildiğinizi düşünüyorum, kaynak stackoverflow.com/questions/ 6408170 /… ve drupal.org/node/717750
Bala

2
@Bala bu tüm kanca değiştirme formları iyi çalışır. Ancak jetonlarda form durumunu nasıl alabilirim? Yani, bu işi iki hafta içinde bırakıyorum. Bu forma bakacak adam bir kodlayıcı değil, yapabilir ama bu onun birincil yeteneği değil - bu yüzden jetonlara ihtiyacım var.
Mołot

evet gelecekteki ihtiyaçlardan bahsettin tamamen unuttum.
Bala

Yanıtlar:


1

Bu, başlığınızdaki soruya cevap vermez, ancak kullanım durumunuzu okumak, Profile2'nin yazıldığı senaryo gibi görünür . İlgili yığın akışı

Webform, anketler ve benzerleri için mükemmeldir, ancak "bunları gelecekteki alanlar için varsayılan değerler olarak kullanabilmek" istediğinizde kullanıcıya bağlanmaları gerekir. Böylece, bu değerleri fatura adresiniz için değiştirilen bir formda çekmek üzere kullanıcının tarihi web formu gönderimini almak için daha fazla özel koda ihtiyacınız olacaktır. Bunu kolaylaştırmak için profil (2) tam olarak yazılmıştır.

Ayrıca, bunu bir başkasına teslim etmeden önce ne kadar az son dakika özel kodlaması yaparsanız, güncelleme yapmaya çalışırken bir başkasının sizi kalbine lanetlemesi o kadar az olur.


Her şey yolunda ve hoş, ama bu formun olmadığı bir şey bir profil :( Demek istediğim, abonelik isteyen insanlar için profiller oluşturmak istemedik. Ayrıca, şimdi tamamen ilgisiz kullanım durumları için buna ihtiyacım var, eğer hiç :)
Mołot

Tamam, yasal ekibinizin söyledikleri ilginç. Sonuç olarak, formları kullanıcıya bağlı verilerle önceden doldurmak istiyorsanız, kullanıcıya bağlı verilere ihtiyacınız vardır. Profil modülü, bu veri kapasitesini korumanın daha kolay bir yoluydu ve talep ettiğiniz işlevlerle oldukça yakın bir uyum sergiliyordu. Hiç kimse profilleri görüntüleyemeyecek şekilde site izinlerini değiştirin ve artık istediğinizle aynı, ancak daha standart kodla. Modülün Profile (Ad) olarak adlandırılması, bu şekilde konuşlandırılması gerektiği anlamına gelmez.
GeliştiriciWeeks

0

Değişkenleri global olarak çıkartın ve_stat [değerleri] [] 'den geçirin. Bu benim için çalıştı, ctools modal pop-up ile çok aşamalı formlarda.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.