Ich habe vor kurzem so etwas gemacht. Da das Profil Felder verwendet, ist dies ziemlich einfach. Für das Formular könnten Sie so etwas tun:
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;
}
Da das gesamte Profilformular nur die Felder sind, die an das Profil angehängt sind, können Sie die Felder mithilfe der Drupal-Kern-APIs einfach selbst an das Formular anhängen:
field_attach_form
Fügt die Felder dem Formular hinzu.
field_attach_validate
übernimmt die Validierung.
field_attach_submit
um das Hinzufügen der Werte zur Entität (Profil) zu handhaben.
- Zuletzt müssten Sie die Profilentität mit speichern
profile2_save
.
Nach dem Durchsuchen des profile2-Modulcodes stellte ich fest, dass er eine Wrapper-Funktion zum Anhängen der Felder an das Formular und zum Speichern des Formulars bietet. Dies ist einfacher, aber dabei verlieren Sie ein wenig die Kontrolle. Um dies zu verwenden, müssen Sie die verwenden profile2_attach_form
. Auf diese Weise wird auch die Validierung und Speicherung von Daten durchgeführt.
Um den obigen Code zu verwenden, sollten Sie in der Lage sein, ihn zu kopieren, das Formular umzubenennen und durch profile_machine_name
den tatsächlichen Computernamen des Profils zu ersetzen, für das Sie das Formular anzeigen möchten.