如何使用profile2模块显示配置文件表单


11

Profile2是使用实体来创建与用户帐户分开的配置文件的模块。

从我的模块中,我希望能够显示一个表格来编辑配置文件实体。可能使用drupal_get_form或Profile2的API或任何其他方法。

最好的方法是什么?

Answers:


20

我最近做了这样的事情。由于配置文件使用字段,因此使事情变得非常简单。对于表单,您可以执行以下操作:

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为您要为其显示表单的配置文件的实际计算机名。


我不明白这里发生了什么。我只需要显示Profile2表单。这可能吗?
卡洛斯·穆尼兹(CarlosMuñiz)

当我在我的模块中使用您的代码,它给了我这个错误:致命错误:不支持的操作类型在C:\ WAMP \ WWW \工作\模块\现场\ field.attach.inc上线550
卡洛斯·穆尼斯

@Charlie我用更多详细信息更新了我的答案,并使用profile2 API提供了另一种更简单的解决方案。
googletorp

这就是googletorp !!!您的答案进行了较小的修改:在我添加的函数的末尾:返回$ form,这是我可以使用drupal_get_form()调用使其显示的唯一方法。如果有另一种显示方式,而没有返回$ form,则请解释,否则,非常感谢!
卡洛斯·穆尼兹(CarlosMuñiz)

我必须等待12个小时才能获得赏金:)
CarlosMuñiz11年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.