it-swarm-vi.com

Cách hiển thị biểu mẫu hồ sơ bằng mô-đun profile2

Profile2 là một mô-đun sử dụng các thực thể để tạo hồ sơ tách biệt với tài khoản người dùng.

Từ trong mô-đun của tôi, tôi muốn có thể hiển thị một biểu mẫu để chỉnh sửa các thực thể hồ sơ. Có thể sử dụng drupal_get_form hoặc có thể API của Profile2 hoặc bất kỳ phương pháp nào khác.

Cách tốt nhất để làm việc này là gì?

11
Carlos Muñiz

Tôi đã làm một cái gì đó như thế này gần đây. Vì hồ sơ sử dụng các trường, điều này làm cho mọi thứ khá đơn giản. Đối với hình thức bạn có thể làm một cái gì đó như thế này:

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;
}

Vì tất cả các biểu mẫu hồ sơ chỉ là các trường được đính kèm vào hồ sơ, bạn chỉ cần tự mình đính kèm các trường vào biểu mẫu, sử dụng Drupal:

  • field_attach_form thêm các trường vào biểu mẫu.
  • field_attach_validate xử lý xác nhận.
  • field_attach_submit để xử lý việc thêm các giá trị vào thực thể (hồ sơ).
  • Cuối cùng, bạn sẽ cần lưu thực thể hồ sơ bằng cách sử dụng profile2_save.

Sau khi duyệt mã mô-đun profile2, tôi thấy rằng nó cung cấp chức năng bao bọc để gắn các trường vào biểu mẫu và lưu biểu mẫu. Điều này đơn giản hơn, nhưng khi làm như vậy, bạn mất một chút kiểm soát. Để sử dụng, bạn cần sử dụng profile2_attach_form. Làm điều này cũng sẽ xử lý xác nhận và lưu dữ liệu.

Để sử dụng mã ở trên, bạn sẽ có thể c/p nó, đổi tên biểu mẫu và thay thế profile_machine_name với tên máy thực tế của hồ sơ bạn muốn hiển thị biểu mẫu cho.

20
googletorp