Cara menyembunyikan dan / atau mencegah akses ke bidang dalam formulir, seperti group_audience untuk grup organik


9

Ini telah mengganggu saya untuk sementara waktu .. Ketika saya mencoba untuk menyembunyikan bidang seperti bidang audiens grup, atau pengaturan penerbitan dari formulir, pada validasi formulir mengatur kedua bidang ini ke nilai nol, meskipun nilai defaut sebagai telah dinyatakan dengan benar.

Saya mencoba menggunakan Invisible, #access, unset hidden nothing work! Ini sangat menyusahkan karena untuk proyek saya saat ini, pengguna dapat mengedit hanya sebagian kecil dari profil mereka pada saat itu, misalnya hanya alamat atau gambar, jadi jika saya menyembunyikan audiens grup pengguna akhirnya dikeluarkan dari grup yang dimilikinya di setiap sunting.

Saya akhirnya menggunakan kode di bawah ini untuk menyembunyikan bidang ini sambil tetap menjaga pengguna dalam grup mereka.

$variables['user_edit_about']['group_audience']= $temp['group_audience'];       
$variables['user_edit_about']['group_audience']['#prefix'] = '<div style="display:none;">';
$variables['user_edit_about']['group_audience']['#suffix'] = '</div>';

Adakah yang akan memikirkan cara yang lebih baik untuk mencapai ini?

Terima kasih


Jawaban ini tidak sempurna karena penggunaan masih dapat mengubah nilainya dengan manipulasi DOM
iStryker

Jawaban:


6

Edit:

Oke, saya sudah menemukannya. Letakkan ini di modul khusus Anda:

function example_form_alter(&$form, &$form_state, $form_id) {
    if($form_id == 'story_node_form') {
        $form['title']['#value'] = 'hot stuff';
        $form['title']['#access'] = FALSE;

    }
}

Ini akan menetapkan judul simpul cerita menjadi 'barang panas' dan TIDAK akan ditampilkan di halaman karena #access = FALSE;

Anda dapat menambahkan lebih banyak kontrol granularity di dalam hook_form_alter () seperti

  global $user;

  // Check to see if $user has does not have the administrator role.
  if (!in_array('administrator', array_values($user->roles))) {
    $form['title']['#access'] = FALSE;
  }

Ini berfungsi untuk Drupal 6 & 7.

Jawaban Lama (abaikan):

Sudah beberapa saat sejak saya melakukan sesuatu seperti ini, jadi saya mungkin salah. Jika Anda mengatur [#value]item formulir, itu tidak akan terlihat pada formulir.

Saya melakukan ini di Drupal 6, hook_form_alter()dalam modul khusus. Saya tidak tahu apakah itu akan berfungsi di Drupal 7 dan saya tidak tahu apakah Anda bisa melakukannya dalam fungsi preproses


Terima kasih atas jawaban Anda, meskipun sayangnya tidak berfungsi dalam kasus saya, bidang formulir sudah memiliki nilai # yang diajukan sebelum mereka mengedit formulir
silkAdmin

@silkAdmin Silakan lihat suntingan baru
iStryker

Terima kasih Stryker untuk meluangkan waktu untuk menggalinya, meskipun teknologi Anda di atas tidak berfungsi sembunyikan bidang, tampaknya nilai default tidak diperhitungkan saat dikirimkan juga. Jadi saya berakhir dengan pengguna masih dikeluarkan dari grup mereka di setiap pengeditan profil. Sejauh ini hanya trik suffix #prefix # yang membuatnya berperilaku normal.
silkAdmin

do $ form ['title'] ['# value'] = $ form ['title'] ['# default_value']
iStryker

5

Anda juga bisa menambahkan kelas CSS 'elemen-tersembunyi' ke elemen formulir

$form['user_edit_about']['group_audience']['#attributes']['class'][] = 'element-hidden';

Seperti yang disebutkan iStryker sebelumnya, masih mungkin untuk mengubah nilai melalui manipulasi DOM. Namun, ini adalah cara yang bagus dan mudah untuk menyembunyikan bidang formulir (atau elemen render lainnya). The element-hiddenkelas didefinisikan dalam system.base.css.


Sobat, kau menyelamatkanku. Terima kasih. Semua metode lain yang saya lihat tidak menampilkan elemen pada formulir itu sendiri. Dalam kasus saya, saya ingin menyembunyikan elemen formulir dalam modul contrib yang mengharapkan elemen-elemen tersebut berada di formulir jika tidak akan berfungsi dengan baik. Perbaikan CSS Anda menyembunyikan elemen yang tidak diinginkan tetapi semuanya masih berfungsi. Terima kasih karena juga mencatat bahwa ini bukan "anti-peretas" dan hanya berfungsi kapan pun yang Anda butuhkan adalah menyederhanakan antarmuka yang Anda tampilkan kepada pengguna editor tepercaya.
Mario Awad
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.