답변:
나는 최근에 이와 같은 것을했다. 프로파일은 필드를 사용하므로 작업이 매우 간단합니다. 양식의 경우 다음과 같이 할 수 있습니다.
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
을 표시하려는 프로파일의 실제 기계 이름으로 바꾸십시오 .