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


11

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?

Yanıtlar:


20

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 bağlı alanlar olduğundan, Drupal çekirdek API'lerini kullanarak alanları kendiniz forma ekleyebilirsiniz:

  • field_attach_form alanları forma ekler.
  • field_attach_validate validasyonu yönetir.
  • field_attach_submit öğeye (profile) değer eklemeyi işler.
  • Son olarak, kullanarak profil varlığını kaydetmeniz gerekir profile2_save.

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. Bunu yapmak, verilerin doğrulanması ve kaydedilmesini de sağlayacaktır.

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


Burada neler olduğunu anlamıyorum. Sadece Profile2 formunu görüntülemem gerekiyor. Mümkün mü?
Carlos Muñiz

kodumu modülümde kullandığımda bana şu hatayı veriyor: Önemli hata: C: \ wamp \ www \ working \ modules \ field \ field.attach.inc satırındaki 550 desteklenmeyen işlenen türleri
Carlos Muñiz

@Charlie Cevabımı daha fazla ayrıntıyla güncelledim ve profile2 API'sini kullanarak alternatif ve daha basit bir çözüm sağladım.
googletorp

bu googletorp !!! cevabınız küçük bir düzenleme ile çalıştı: eklediğim işlevin sonunda: drupal_get_form () ile çağırarak görüntülemenin tek yolu olan $ form'u döndürmek. Dönüş $ formu olmadan görüntülemek için alternatif bir yol varsa, lütfen açıklayın, aksi takdirde çok teşekkür ederim!
Carlos Muñiz

Ödül için 12 saat beklemek zorundayım :)
Carlos Muñiz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.