Son zamanlarda böyle bir şey yaptım. Profil alanları kullandığından, bu işleri oldukça basit hale getirir. Form için böyle bir şey yapabilirsiniz:
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;
}
Tüm profil formu yalnızca profile bağlı alanlar olduğundan, Drupal çekirdek API'lerini kullanarak alanları kendiniz forma ekleyebilirsiniz:
field_attach_form
alanları forma ekler.
field_attach_validate
validasyonu yönetir.
field_attach_submit
öğeye (profile) değer eklemeyi işler.
- Son olarak, kullanarak profil varlığını kaydetmeniz gerekir
profile2_save
.
Profile2 modül koduna göz attıktan sonra, alanları forma eklemek ve formu kaydetmek için bir sarıcı işlevi sağladığını buldum. Bu daha basit, ancak bunu yaparken biraz kontrol sahibi değilsiniz. Bunu kullanmak için profile2_attach_form
. Bunu yapmak, verilerin doğrulanması ve kaydedilmesini de sağlayacaktır.
Yukarıdaki kodu kullanmak için c / p'yi kullanabilmeniz, formu yeniden adlandırmanız ve formu profile_machine_name
görüntülemek istediğiniz profilin gerçek makine adıyla değiştirebilmeniz gerekir .