web-gelistirme-sc.com

Teması user_profile_form (kullanıcı düzenleme formu)

Form için iki sütunlu bir düzen kurmamı ve belirli öğeleri hariç tutmamı sağlayacak kullanıcı profili formunu temanın kolay yollarını arıyorum.

Nasıl başarabilirim?

7
areynolds

Display Suite modülünü kullanmanın yanı sıra, form oluşturma yöntemlerinin çoğunun yazılması için biraz kod gerekir. Aşağıdaki yöntemde, formdaki değişkenleri, istediğiniz HTML yapısına uyacak şekilde bir şablon dosyasında verilebilen tanımlarım. Tüm kodumu template.php dosyasına koydum, ancak bunu yapmak için kolayca özel bir modül yapabilirsiniz.

  1. Hook_theme () uygulaması ekle

    function YOURTHEME_theme($existing, $type, $theme, $path){
      return array(
        'user_profile_form' => array(
          'render element' => 'form',
          'template' => 'user-profile-form',
          'path' => drupal_get_path('theme', 'YOURTHEME') . '/templates', 
          //add '/templates' only if you store template files in an additional folder
        ),
    
      );
    }
    

    Bu, Drupal tema sistemine YOURTHEME/şablonlarda onu bekleyen bir şablon dosyası olduğunu söyler.

  2. Ardından, hook_preprocess_HOOK işlevinde bu şablona geçmek için bazı değişkenler tanımlayacağız. Formun yapılandırılmış dizisini $ variable ['form'] içinde bulabilir ve form öğelerini tpl.php dosyamızın etrafına atmak istediğimiz değişkenlere atayabiliriz.

    function YOURTHEME_preprocess_user_profile_form(&$variables) {
      $form_inputs = array(
        'account' => $variables['form']['account'],
        'picture' => $variables['form']['picture'],
        'actions' => $variables['form']['actions'],
      );
      $variables['rendered'] = _YOURTHEME_form_variables_render_all($form_inputs);
    }
    
    function _YOURTHEME_form_variables_render_all($elements) {
        //Create array to return, with element name as key and element as value
        $elements_array = array();
        //For each element, render it and add it to the array
        foreach ($elements as $key => $element) {
            $elements_array[$key] = render($element);
        }
        //Return array
        return $elements_array;
    }
    

    Bu örnek, genel hesap bilgisi alanlarını, kullanıcı resmi yükleme alanını (resimler etkinse) ve gönderme işlemlerini "işlenmiş" adlı bir değişkene koyacaktır.

  3. Şimdi bu değişkenleri tanımladığımıza göre bunları bir şablon dosyasında çıktılayabiliriz. 'YOURTHEME/templates' içinde user-profile-form.tpl.php adlı bir şablon dosyası oluşturun. Bu bir demo örneği:

    <div id="new-form">
      <?php echo $rendered['picture']; ?>
      <?php echo $rendered['account']; ?>
      <?php echo $rendered['actions']; ?>
      <input type="hidden" name="form_id" value="<?php print $form['#form_id']; ?>" />
      <input type="hidden" name="form_build_id" value="<?php print $form['#build_id']; ?>" />
      <input type="hidden" name="form_token" value="<?php print $form['form_token']['#default_value']; ?>" />
    </div>
    

Sonunda gizli form alanlarına dikkat edin; bunlar hayati Drupal formların saldırılara karşı korunmasına yardımcı olan simgeleri içerir.

Kullanıcı düzenleme sayfanızı ziyaret ettiğinizde, artık yalnızca bazı genel hesap bilgisi alanlarını ve resim alanlarını görmelisiniz. Form öğelerini ayırmak için önişleme işlevinde farklı değişkenler oluşturun ve bunları istediğiniz herhangi bir işaretlemeyi ekleyerek user-profile-form.tpl.php dosyasına istediğiniz yere yerleştirin.

7
areynolds

Ekran paketleri yalnızca ekran için kullanılabilir, düzenleme için kullanılamaz. Her ikisini de ele alabilseydi harikaydı.

1
rpataca

areynolds kodu için bazı düzeltmeler:

'Oluşturma öğesindeki alt çizgi düzeltmesi

function YOURTHEME_theme($existing, $type, $theme, $path){
  return array(
    'user_profile_form' => array(
      'render element' => 'form',
      'template' => 'user-profile-form',
      'path' => drupal_get_path('theme', 'YOURTHEME') . '/templates', 
      //add '/templates' only if you store template files in an additional folder
    ),

  );
}

Önişleme işlevini veri geçersiz kılma (hesap-> resim) ve eylem öğeleri ekleme (form düğmesi) ile düzeltin.

function YOURTHEME_preprocess_user_profile_form(&$variables) {
  $required_elements[]=$variables['form']['account'];
  $required_elements[]=$variables['form']['picture'];
  $required_elements[]=$variables['form']['actions'];
  $variables['rendered'] = drupal_render($required_elements);
}

Ancak tüm bu manipülasyonlar sadece formun görünümünü verir. Ancak form, doğrulamak, işleyicileri göndermek vb. Gibi diğer öğeleri gerektirdiği için düzgün çalışmaz. Bu nedenle, gerekli tüm form meta verilerini bırakarak $ değişkenler ['form'] dizisinde istenmeyen öğeleri gizlemenin en iyi yolunun olduğunu düşünüyorum.

0
ACD

Paneller, Profil düzenleme formunu tamamen devralabilir ve bir avuç yama (şu anda) ile Paneller ilişkisi olarak Profil2 bilgilerini alabilirsiniz.

0
ergophobe