profile2 모듈을 사용하여 프로파일 양식을 표시하는 방법


11

Profile2는 엔터티를 사용하여 사용자 계정과 별도의 프로필을 만드는 모듈입니다.

내 모듈 내에서 프로필 엔터티를 편집하는 양식을 표시 할 수 있기를 원합니다. drupal_get_form 또는 Profile2의 API 또는 다른 방법을 사용할 수 있습니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변:


20

나는 최근에 이와 같은 것을했다. 프로파일은 필드를 사용하므로 작업이 매우 간단합니다. 양식의 경우 다음과 같이 할 수 있습니다.

function my_profile_form($form, &$form_state) {
  global $user;
  if (!isset($form_state['profiles'])) {
    $profile = profile2_load_by_user($user, 'profile_machine_name');
    if (!$profile) {
      $profile = profile_create(array(
        'type' => 'profile_machine_name',
        'uid' => $user->uid
      ));
    }
    $form_state['profiles'][$profile->type] = $profile;
  }

  // Use field attach form and handle the fields yourself:
  field_attach_form('profile2', $profile, $form, $form_state);
  // Or use profile2 API which is simpler
  profile2_attach_form($form, $form_state);

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
  );
  return $form;
}

모든 프로파일 양식은 프로파일에 첨부 된 필드 일 뿐이므로 Drupal 코어 API를 사용하여 필드를 양식에 직접 첨부 할 수 있습니다.

  • field_attach_form 필드를 양식에 추가합니다.
  • field_attach_validate 유효성 검사를 처리합니다.
  • field_attach_submit 엔티티 (프로파일)에 값 추가를 처리합니다.
  • 마지막으로을 사용하여 프로파일 엔티티를 저장해야합니다 profile2_save.

profile2 모듈 코드를 탐색 한 후 필드를 양식에 첨부하고 양식을 저장하는 랩퍼 기능을 제공한다는 것을 알았습니다. 이것은 더 간단하지만 그렇게하면 약간의 통제력을 잃게됩니다. 이것을 사용하려면을 사용해야합니다 profile2_attach_form. 이렇게하면 데이터의 유효성 검사 및 저장도 처리됩니다.

위의 코드를 사용하려면 c / p 코드를 작성하고 양식의 이름을 바꾸고 양식 profile_machine_name을 표시하려는 프로파일의 실제 기계 이름으로 바꾸십시오 .


나는 여기서 무슨 일이 일어나고 있는지 이해하지 못한다. Profile2 양식 만 표시하면됩니다. 이게 가능해?
Carlos Muñiz 2016 년

내 모듈의 코드를 사용할 때 그것은 나에게 오류를 제공합니다 : C에서 지원되지 않는 피연산자 유형 : 치명적인 오류 \ WAMP \ www가 \ 라인 (550)에 \ 모듈 \ 필드 \ field.attach.inc 작업
카를로스 무니즈

@Charlie 나는 자세한 내용으로 답변을 업데이트하고 profile2 API를 사용하여 대안적이고 간단한 솔루션을 제공했습니다.
googletorp

googletorp입니다 !!! 귀하의 답변은 약간의 편집으로 작동했습니다. 추가 된 함수의 끝에서 : $ $ form drupal_get_form ()으로 호출하여 표시 할 수있는 유일한 방법이었습니다. 반환 $ form없이 표시하는 다른 방법이 있다면 설명하십시오. 그렇지 않으면 대단히 감사합니다!
Carlos Muñiz 2016 년

나는 수상에 현상금 : 12 시간 기다려야
카를로스 무니즈
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.