it-swarm-id.com

Mereka user_profile_form (formulir edit pengguna)

Saya mencari cara mudah untuk tema formulir profil pengguna yang akan memungkinkan saya untuk mengatur tata letak dua kolom untuk formulir dan mengecualikan elemen-elemen tertentu.

Bagaimana saya bisa mencapainya?

7
areynolds

Selain menggunakan modul Display Suite, sebagian besar metode untuk membuat tema memerlukan sedikit kode untuk ditulis. Dalam metode berikut ini saya mendefinisikan variabel dari formulir yang dapat dikeluarkan dalam file template agar sesuai dengan struktur HTML apa pun yang Anda inginkan. Saya meletakkan semua kode saya di template.php, tetapi Anda dapat dengan mudah membuat modul khusus untuk melakukan ini.

  1. Tambahkan implementasi hook_theme ()

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

    Ini memberitahu Drupal bahwa ada file template menunggu di YOURTHEME/templates.

  2. Selanjutnya kita akan mendefinisikan beberapa variabel untuk diteruskan ke templat itu dalam fungsi hook_preprocess_HOOK. Kita dapat menemukan array terstruktur dari form dalam $ variable ['form'] dan menetapkan elemen form ke variabel yang ingin kita lemparkan ke file tpl.php kita.

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

    Contoh ini akan menempatkan bidang info akun umum, bidang unggahan gambar pengguna (jika gambar diaktifkan), dan tindakan kirim ke variabel yang disebut "dirender."

  3. Sekarang kita telah mendefinisikan variabel-variabel ini, kita dapat menampilkannya dalam file templat. Buat file template bernama user-profile-form.tpl.php di 'YOURTHEME/templates'. Ini adalah contoh demo:

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

Perhatikan bidang formulir tersembunyi di bagian akhir; ini termasuk token vital Drupal yang membantu mengamankan formulir dari serangan. Formulir Anda tidak akan berfungsi tanpanya.

Ketika Anda mengunjungi halaman edit pengguna Anda, Anda seharusnya sekarang hanya melihat beberapa bidang info akun umum dan bidang gambar. Buat variabel yang berbeda di fungsi preproses untuk memisahkan elemen formulir dan menempatkannya di mana pun Anda inginkan di file user-profile-form.tpl.php, menambahkan markup apa pun yang Anda suka.

7
areynolds

Tampilan suite hanya dapat digunakan untuk tampilan, bukan untuk mengedit. Itu hebat, jika bisa menangani keduanya.

1
rpataca

Beberapa perbaikan untuk areynolds's kode:

Underscore fix in 'render element

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
    ),

  );
}

Memperbaiki fungsi preprocess dari pengesampingan data (akun-> gambar) dan menambahkan elemen tindakan (tombol form).

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

Tetapi semua manipulasi ini hanya memberikan tampilan formulir. Tetapi formulir tidak akan berfungsi sebagaimana mestinya karena memerlukan elemen lain seperti memvalidasi, mengirim penangan, dll. Jadi saya pikir cara terbaik untuk menyembunyikan elemen yang tidak diminta dalam array $ variabel ['form'] meninggalkan semua metadata formulir yang diperlukan.

0
ACD

Panel sepenuhnya dapat mengambil alih formulir edit Profil dan dengan sedikit tambalan (saat ini) Anda dapat menarik info Profile2 sebagai hubungan Panel.

0
ergophobe