Я щось подібне зробив нещодавно. Оскільки профіль використовує поля, це робить речі досить простими. Для форми ви можете зробити щось подібне:
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 основних програм:
field_attach_form
додає поля до форми.
field_attach_validate
обробляє перевірку.
field_attach_submit
для обробки додавання значень сутності (профілю).
- Нарешті, вам потрібно буде зберегти сутність профілю за допомогою
profile2_save
.
Переглянувши код модуля profile2, я виявив, що він забезпечує функцію обгортки для приєднання полів до форми та збереження форми. Це простіше, але, роблячи це, ви втрачаєте трохи контролю. Для цього вам потрібно скористатися profile2_attach_form
. Це також допоможе перевірити та зберегти дані.
Щоб скористатись вищевказаним кодом, ви повинні мати змогу c / p, перейменувати форму та замінити profile_machine_name
фактичною машинною назвою профілю, для якого ви хочете відобразити форму.