web-gelistirme-sc.com

Profile2 modülünü kullanarak bir profil formu nasıl görüntülenir?

Profil2, kullanıcı hesabından ayrı profiller oluşturmak için varlıkları kullanan bir modüldür.

Modülümden, profil varlıklarını düzenlemek için bir form görüntüleyebilmek istiyorum. Muhtemelen drupal_get_form veya belki Profile2'nin API'sini veya başka bir yöntemi kullanmak.

Bununla ilgili en iyi yol nedir?

11
Carlos Muñiz

Son zamanlarda böyle bir şey yaptım. Profil alanları kullandığından, bu işleri oldukça basit hale getirir. Form için böyle bir şey yapabilirsiniz:

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

Tüm profil formu yalnızca profile ekli alanlar olduğundan, Drupal temel API'ları kullanarak alanları kendiniz forma ekleyebilirsiniz:

  • field_attach_form Alanları forma ekler.
  • field_attach_validate Doğrulama işlemini yapıyor.
  • field_attach_submit Öğeye değer ekleme (profil).
  • Son olarak, profile2_save Kullanarak profil varlığını kaydetmeniz gerekir.

Profile2 modül koduna göz attıktan sonra, alanları forma eklemek ve formu kaydetmek için bir sarıcı işlevi sağladığını buldum. Bu daha basit, ancak bunu yaparken biraz kontrol sahibi değilsiniz. Bunu kullanmak için profile2_attach_form Kullanmanız gerekir. Bunu yapmak da verilerin doğrulanması ve kaydedilmesini sağlar.

Yukarıdaki kodu kullanmak için, c/p'yi kullanabilmeniz, formu yeniden adlandırmanız ve profile_machine_name Yerine formu görüntülemek istediğiniz profilin gerçek makine adıyla değiştirmeniz gerekir.

20
googletorp