回答:
私は最近このようなことをしました。プロファイルはフィールドを使用するので、これは物事をかなり単純にします。フォームの場合、次のようなことができます。
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
を表示するプロファイルの実際のマシン名に置き換えます。