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


11

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ì?

Câu trả lời:


20

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 API lõi Drupal:

  • field_attach_form thêm các trường vào mẫu.
  • field_attach_validate xử lý xác nhận.
  • field_attach_submit để xử lý thêm các giá trị cho 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 để đính kèm 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_namebằng tên máy thực tế của hồ sơ bạn muốn hiển thị biểu mẫu cho.


Tôi không hiểu chuyện gì đang xảy ra ở đây. Tôi chỉ cần hiển thị mẫu Profile2. Điều này có thể không?
Carlos Muñiz

Khi tôi sử dụng mã của bạn trong mô-đun của mình, nó sẽ báo lỗi cho tôi: Lỗi nghiêm trọng: Các loại toán hạng không được hỗ trợ trong C: \ wamp \ www \ work \ module \ field \ field.attach.inc trên dòng 550
Carlos Muñiz

@Charlie Tôi đã cập nhật câu trả lời của mình với nhiều chi tiết hơn và cung cấp giải pháp thay thế và đơn giản hơn bằng API profile2.
googletorp

đây là nó googletorp !!! câu trả lời của bạn đã hoạt động với một chỉnh sửa nhỏ: ở cuối hàm tôi đã thêm: trả về biểu mẫu $ đó là cách duy nhất tôi có thể làm cho nó hiển thị bằng cách gọi nó bằng drupal_get_form (). Nếu có một cách khác để hiển thị nó mà không có biểu mẫu $ return thì hãy giải thích, nếu không thì cảm ơn bạn rất nhiều!
Carlos Muñiz

Tôi phải đợi 12 giờ để nhận tiền thưởng :)
Carlos Muñiz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.