Как отобразить форму профиля с помощью модуля profile2


Profile2 - это модуль, который использует сущности для создания профилей, которые отделены от учетной записи пользователя.

Из моего модуля я хочу иметь возможность отображать форму для редактирования объектов профиля. Возможно, с помощью drupal_get_form или, возможно, API Profile2 или любого другого метода.

Как лучше всего это сделать?

 11
Author: kiamlaluno, 2011-06-13

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 с фактическим именем компьютера профиля, для которого вы хотите отобразить форму.

 20
Author: googletorp, 2011-06-24 10:51:06