Làm cách nào để truy cập các giá trị từ các bước trước đó trong Biểu mẫu web nhiều trang?


12

Tôi đang sử dụng Webform 4. Nó sử dụng mã thông báo của Drupal, không phải là% token giống như trước đây trong phiên bản 3 và gần như tất cả những gì tôi tìm thấy là về webform 3.

Nói rằng tôi muốn làm mẫu đăng ký nhiều trang. Trên trang đầu tiên chỉ có một trường email. Trong lần thứ hai, tôi muốn một đánh dấu sẽ nói một cái gì đó như:

Cấu hình đăng ký chi tiết cho molot@example.com

Tương tự, tôi muốn có thể sử dụng chúng làm giá trị mặc định cho các trường trong tương lai, như hỏi người dùng về địa chỉ thanh toán và sau đó cho địa chỉ giao hàng.

Có bất kỳ mã thông báo cho điều đó? Những gì tôi đã làm bây giờ là:

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

Nó hoạt động, nhưng nó chỉ hiển thị các giá trị từ một bước trước đó, do đó yêu cầu một số thủ thuật bẩn với các trường ẩn để mang giá trị email qua nhiều bước. Tôi thừa nhận - nó chỉ nhanh và bẩn. Có built-in cách để làm điều đó, hoặc đúng duy trì góp phần cho việc này? Hoặc một cách để làm cho mã này hoạt động độc lập $_POST['submitted'], để làm cho nó mang các giá trị qua nhiều bước và làm cho mã thông báo (từ các thành phần Webform có sẵn) hiển thị trên danh sách mã thông báo trong cửa sổ chỉnh sửa?


Bạn có thể đặt biến phiên khi bạn gửi trang có giá trị mong muốn trên đó không?
Darvanen

@Darvanen có thể tôi có thể, nhưng giá trị đã được lưu ở đâu đó, phải không? Vì vậy, tôi muốn sử dụng những gì đã có. Và tôi khó tin rằng tôi là người đầu tiên cần thứ này. Có lẽ tôi chỉ thất bại trong việc tìm giải pháp đó?
Mołot

Tôi không chắc chắn về $ form_state ['Storage'] này nhưng tôi đã tìm kiếm 2 hoặc 3 bài đăng mà họ đề cập đến tất cả dữ liệu được lưu trữ trong $ form_state ['Storage'] vì vậy tôi nghĩ rằng bạn có thể truy cập dữ liệu, nguồn stackoverflow.com/questions/ 6408170 / Lọdrupal.org/node/717750
Bala

2
@Bala này hoạt động trong tất cả các hình thức thay đổi hook tất cả các quyền. Nhưng làm thế nào tôi có được trạng thái hình thức trong mã thông báo? Ý tôi là, tôi sẽ bỏ công việc này sau hai tuần nữa. Anh chàng sẽ chăm sóc cho hình thức này không phải là một lập trình viên, anh ta có thể làm điều đó nhưng đó không phải là kỹ năng chính của anh ta - đó là lý do tại sao tôi cần mã thông báo.
Mołot

yeah bạn đề cập cho nhu cầu trong tương lai tôi quên hoàn toàn.
Bala

Câu trả lời:


1

Điều này không trả lời câu hỏi trong tiêu đề của bạn, nhưng đọc trường hợp sử dụng của bạn, nó có vẻ giống như kịch bản mà Profile2 được viết cho. Bài viết stackoverflow liên quan

Webform rất tốt cho các khảo sát và như vậy, nhưng khi bạn muốn "có thể sử dụng chúng làm giá trị mặc định cho các trường trong tương lai" thì chúng cần được kết nối với người dùng. Vì vậy, sau đó bạn sẽ cần thêm mã tùy chỉnh để tìm nạp đệ trình biểu mẫu web lịch sử của người dùng để lấy các giá trị này dưới dạng thay đổi cho địa chỉ thanh toán của bạn. Hồ sơ (2) được viết chính xác để làm cho điều này dễ dàng hơn.

Ngoài ra, mã hóa tùy chỉnh vào phút cuối mà bạn đang thực hiện trước khi giao nó cho người khác, càng ít người khác sẽ nguyền rủa bạn trong lòng họ khi họ đang cố gắng cập nhật.


Tất cả đều tốt và đẹp, nhưng một điều mà hình thức này không phải là một hồ sơ :( Ý tôi là, chúng tôi không muốn tạo hồ sơ cho những người yêu cầu đăng ký. Các luật khác nhau áp dụng khi bạn làm, nghiêm ngặt hơn được nói bởi bộ phận luật pháp. Ngoài ra, bây giờ tôi cần nó cho các trường hợp sử dụng hoàn toàn không liên quan, nếu có :)
Mołot

Được rồi, đó là điều thú vị những gì nhóm pháp lý của bạn nói. Tóm lại, nếu bạn muốn chuẩn bị trước các biểu mẫu với dữ liệu được kết nối với người dùng, bạn cần dữ liệu được kết nối với người dùng. Mô-đun Hồ sơ là một cách dễ dàng hơn để duy trì khả năng dữ liệu đó và rất phù hợp với các chức năng bạn yêu cầu. Thay đổi quyền truy cập trang web để không ai có thể xem hồ sơ và hiện tại nó giống như những gì bạn muốn nhưng với mã chuẩn hơn. Chỉ vì mô-đun được đặt tên Hồ sơ không có nghĩa là nó phải được triển khai như vậy.
Nhà phát

0

Decalre các biến là toàn cục và chuyển từ_state [giá trị] [] vào chúng. Điều này làm việc cho tôi, trong các hình thức đa giai đoạn với cửa sổ bật lên phương thức ctools.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.