Profile2是使用实体来创建与用户帐户分开的配置文件的模块。
从我的模块中,我希望能够显示一个表格来编辑配置文件实体。可能使用drupal_get_form或Profile2的API或任何其他方法。
最好的方法是什么?
Profile2是使用实体来创建与用户帐户分开的配置文件的模块。
从我的模块中,我希望能够显示一个表格来编辑配置文件实体。可能使用drupal_get_form或Profile2的API或任何其他方法。
最好的方法是什么?
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;
}
由于所有配置文件表单仅是附加到配置文件的字段,因此您可以使用Drupal核心API将自己自己附加到表单中:
field_attach_form
将字段添加到表单。field_attach_validate
处理验证。field_attach_submit
处理将值添加到实体(配置文件)的过程。profile2_save
。浏览profile2模块代码后,我发现它提供了包装器功能,可以将字段附加到表单并保存表单。这比较简单,但是这样做会使您失去一些控制。要使用此功能,您需要使用profile2_attach_form
。这样做还将处理数据的验证和保存。
要使用上面的代码,您应该能够对其进行c / p,重命名表单并替换profile_machine_name
为您要为其显示表单的配置文件的实际计算机名。