다중 페이지 Webform의 이전 단계에서 값에 액세스하는 방법은 무엇입니까?


12

Webform 4를 사용하고 있습니다. Drupal의 토큰을 사용합니다. 버전 3에서 사용했던 것과 같은 % 토큰이 아닙니다.

여러 페이지로 된 구독 양식을 만들고 싶다고 가정 해 보겠습니다. 첫 페이지에는 이메일 필드 만 있습니다. 두 번째로 다음과 같은 마크 업을 원합니다.

molot@example.com에 대한 자세한 구독 구성

마찬가지로, 청구 지 주소를 요청한 다음 배달 주소를 묻는 등 미래 필드의 기본값으로 사용할 수 있기를 원합니다.

그것에 대한 토큰이 있습니까? 내가 지금 한 일은 :

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

작동하지만 한 단계 이전의 값만 표시하므로 여러 단계에 걸쳐 이메일 값을 전달하기 위해 숨겨진 필드가있는 몇 가지 더러운 트릭이 필요합니다. 나는 인정한다-그것은 단지 빠르고 더러운 것이었다. 어떤 거기에 내장 그것을 할 방법, 또는 제대로 기여를 유지하기 위해 관리하는 이것에 대한 모듈은? 또는이 코드를 독립적으로 작동 $_POST['submitted']하게하고 여러 단계에서 값을 전달하고 사용 가능한 Webform 요소의 토큰을 편집 창의 토큰 목록에 표시하는 방법은 무엇입니까?


원하는 값을 가진 페이지를 제출할 때 세션 변수를 설정할 수 있습니까?
Darvanen

@Darvanen은 가능하지만 값은 이미 어딘가에 저장되어 있습니까? 그래서 나는 이미 존재하는 것을 사용하고 싶습니다. 그리고 나는 이것이 내가 이것을 필요로하는 첫 번째 사람이라고 믿지 않습니다. 아마 나는 거기에있는 솔루션을 찾지 못했습니다?
Mołot

이 $ form_state [ 'storage']에 대해 잘 모르겠지만 $ form_state [ 'storage']에 저장된 모든 데이터를 언급 한 2 ~ 3 개의 게시물을 검색 했으므로 소스, 데이터에 액세스 할 수 있다고 생각합니다 stackoverflow.com/questions/ 6408170 /…drupal.org/node/717750
Bala

2
@ 발라 이것은 모든 후크 변경 양식에서 작동합니다. 그러나 토큰에서 양식 상태를 어떻게 얻습니까? 나는이 일을 2 주 안에 끝내 겠다는 뜻이다. 이 양식을 돌보는 사람은 코더가 아니며, 할 수는 있지만 그의 주요 기술은 아닙니다. 그래서 토큰이 필요합니다.
Mołot

그래, 당신은 내가 완전히 잊었다 미래의 요구에 대해 언급했다.
Bala

답변:


1

이것은 제목의 질문에 대답하지 않지만 사용 사례를 읽는 것은 Profile2 가 작성된 시나리오와 비슷합니다 . 관련 stackoverflow 게시물

Webform은 설문 조사 등에 유용하지만 "향후 필드의 기본값으로 사용할 수 있도록하려면"사용자에게 연결해야합니다. 따라서 청구서 수신 주소에 대한 대체 형식으로 이러한 값을 가져 오려면 사용자의 이전 웹 양식 제출을 가져 오려면 더 많은 사용자 정의 코드가 필요합니다. 이것을 쉽게하기 위해 Profile (2)가 정확하게 작성되었습니다.

또한, 다른 사용자에게이 정보를 전달하기 전에 수행하는 마지막 순간의 사용자 지정 코딩이 적을수록 업데이트를 시도 할 때 다른 사용자가 마음에 저주를 줄 것입니다.


훌륭하고 훌륭하지만이 양식이 아닌 한 가지 프로필은 다음과 같습니다. (구독을 요구하는 사람들을 위해 프로필을 작성하고 싶지 않았습니다. 또한 법무 부서에 의해 알려졌으며, 이제는 전혀 관련이없는 사용 사례를 위해 필요합니다. :)
Mołot

네, 법무 팀의 말이 흥미 롭습니다. 결론적으로, 사용자에게 연결된 데이터로 양식을 미리 채우려면 사용자에게 연결된 데이터가 필요합니다. 프로파일 모듈은 해당 데이터 기능을 유지하기위한 더 쉬운 방법이며 요청한 기능과 매우 유사합니다. 아무도 사이트 프로필을 볼 수 없도록 사이트 권한을 변경하십시오. 이제는 원하는 것과 동일하지만보다 표준적인 코드를 갖습니다. 모듈의 이름이 프로파일이라고해서 반드시 그렇게 배치되어야한다는 의미는 아닙니다.
DeveloperWeeks

0

변수를 전역으로 선언하고 from_state [values] []에 전달하십시오. 이것은 ctools 모달 팝업이있는 다단계 양식으로 저에게 효과적이었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.