Как отобразить форму профиля с помощью модуля profile2
Profile2 - это модуль, который использует сущности для создания профилей, которые отделены от учетной записи пользователя.
Из моего модуля я хочу иметь возможность отображать форму для редактирования объектов профиля. Возможно, с помощью drupal_get_form или, возможно, API Profile2 или любого другого метода.
Как лучше всего это сделать?
1 answers
Недавно я сделал нечто подобное. Поскольку профиль использует поля, это делает вещи довольно простыми. Для формы вы могли бы сделать что-то вроде этого:
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;
}
Поскольку вся форма профиля состоит только из полей, прикрепленных к профилю, вы можете просто прикрепить поля самостоятельно к форме, используя API ядра Drupal:
-
field_attach_form
добавляет поля в форму. -
field_attach_validate
обрабатывает проверку. -
field_attach_submit
для обработки добавления значений в сущность (профиль). - Наконец, вам нужно будет сохранить объект профиля с помощью
profile2_save
.
Просмотрев код модуля profile2, я обнаружил, что он предоставляет функцию-оболочку для прикрепления полей к форме и сохранения формы. Это проще, но при этом вы немного теряете контроль. Чтобы использовать это, вам нужно использовать profile2_attach_form
. Это также позволит выполнить проверку и сохранение данных.
Чтобы использовать приведенный выше код, вы должны иметь возможность c/p его, переименовать форму и заменить profile_machine_name
с фактическим именем компьютера профиля, для которого вы хотите отобразить форму.