Nonaktifkan tab vertikal berdasarkan jenis konten atau peran pengguna

10

Beberapa pengguna mungkin hanya memiliki kemampuan untuk mengedit salah satu dari set bidang yang muncul di tab vertikal pada formulir edit simpul. Dalam kasus seperti itu terlihat konyol menggunakan tab vertikal karena hanya ada satu tab vertikal yang dapat dipilih. Lihat tangkapan layar:

tangkapan layar

Jadi, apakah mungkin untuk menonaktifkan tab vertikal berdasarkan peran pengguna? Atau, kecuali itu, nonaktifkan semuanya untuk jenis konten tertentu? Untuk kasus penggunaan saya, saya hanya ingin Lokasi tidak ditampilkan di tab vertikal.

Saya mencoba Bidang Renderable dan Grup Lapangan bersama-sama tetapi mereka mengelola formulir salah (kereta, saya pikir). Atur Fields tidak dapat memisahkan Tab Vertikal.

Jay
sumber
Apakah Anda pernah memperbaikinya? Mencoba melakukan hal yang sama dengan tab produk ubercart.
Dee

Jawaban:

7

Ada beberapa cara untuk melakukan ini:

  1. Anda dapat menggunakan modul Elemen Renderable (seperti yang Anda sebutkan di atas). Ini memungkinkan Anda untuk mendaftarkan setiap bagian bangunan di instalasi Anda dan mengelola tampilan melalui Field UI. Ini akan membuat (tambahan) elemen yang tersedia dari entitas yang ada pada formulir kelola / tampilan layar atau Anda dapat misalnya mendaftarkan formulir kontak dan mengatur ulang bidang melalui UI Bidang. Saat ini berfungsi dengan baik pada formulir, dukungan untuk orang lain akan datang dalam iterasi kedua.

  2. Atau tambahkan yang berikut ke modul khusus Anda:

    $config['yourcontenttype_node_form'] = FALSE;
    variable_set('vertical_tabs_forms', $config);
  3. Sebuah modul sandbox yang menonaktifkan tab vertikal

Inilah masalah inti yang merujuk pada ini.


sumber
Seperti yang saya katakan dalam pertanyaan, Renderable Elements tidak bekerja untuk saya. Ini masih dalam tahap alfa dan ada bug yang diketahui dengan Location. Jadi itu tidak berfungsi untuk situasi saya. Kalau tidak, ya, saya pikir ini akan berhasil. Jika di masa depan bug itu diperbaiki, Renderable Elements mungkin adalah cara terbaik untuk menyelesaikannya.
Jay
maaf saya baru saja membaca pertanyaan Anda dan benar-benar melewatkan referensi Anda ke modul elemen yang dapat di render. Yang sedang berkata, versi dev bekerja seperti pesona. Cobalah.
Hmm baiklah. Saya akan mencoba menggunakan versi dev jika tidak ada alternatif lain. Biarkan ini terbuka untuk saat ini.
Jay
Saya telah mengubah jawaban saya di atas dengan lebih banyak opsi.
1
Kamu benar. Saya baru mencobanya dan ini tidak berhasil di D7 seperti di D6. Sayangnya, jika elemen yang dapat diulang tidak berfungsi dan Anda tidak nyaman dengan modul Anda sendiri atau menggunakan modul sandbox, saya tidak yakin apa lagi.
6

Anda juga dapat menggunakan pemeriksaan #access untuk mencegah orang melihat tab vertikal.

$form['additional_settings']['#access'] = FALSE;

Cukup tambahkan itu ke perubahan bentuk kait atau di antara pemuatan dan rendering formulir. Setelah itu Anda dapat memanggil render ($ form) untuk mendapatkan markup.

Derek Webb
sumber
2

Saya menulis solusi sederhana yang mungkin ada di utas yang telah disebutkan: https://drupal.org/node/1048644#comment-7822687 . Untuk kenyamanan, saya akan menempelkannya di sini.

Ada cara sederhana untuk menonaktifkan tab vertikal pada formulir, dengan hanya mengubah nilai $form['additional_settings']['#type']variabel ke 'fieldset'dalam implementasi hook_form_alter () atau hook_form_FORM_ID_alter () , jika itu sama dengan 'vertical_tabs'.
Anda tidak perlu mengubah pengaturan akses atau menjalankan seluruh $formarray secara rekursif, yang terakhir mengkonsumsi sumber daya yang tidak perlu terlalu banyak.
(Diuji dalam Drupal 7.23 .)

/**
 * Disable Vertical tabs on a form with simply changing the value of $form['additional_settings']['#type']
 * @see https://drupal.org/node/1048644
 */
function form_disable_vertical_tabs(&$form){
  // originally $form['additional_settings']['#type'] equals to 'vertical_tabs'
  if(isset($form['additional_settings']['#type']) && ($form['additional_settings']['#type'] === 'vertical_tabs')){
    $form['additional_settings']['#type'] = 'fieldset';
  }
}

/**
 * Implements hook_form_alter().
 */
function MYMODULEORTHEMENAME_form_alter(&$form, &$form_state, $form_id) {

  if($form_id == 'my_form_id'){
    // disable vertical tabs for this form
    form_disable_vertical_tabs($form);
  }
}

Itu semua, tentu saja, gantiMYMODULEORTHEMENAME dengan modul Anda sendiri atau nama tema (yang terakhir dalam template.phpfile), danmy_form_id ke id formulir Anda.


Anda juga dapat menonaktifkan bidang vertikal hanya untuk pengguna yang TIDAK memiliki peran administrator :

/**
 * Implements hook_form_alter().
 */
function MYMODULEORTHEMENAME_form_alter(&$form, &$form_state, $form_id) {

  global $user;
  $is_administrator = in_array('administrator', array_values($user->roles));

  if($form_id == 'my_form_id'){
    // if $user does NOT have the administrator role.
    if (!$is_administrator) {
      // disable vertical tabs for this form
      form_disable_vertical_tabs($form);
    }
  }
}

Dalam kasus seseorang tertarik, saya terpasang patch (yang melakukan hal yang sama seperti di atas) untuk Dripman modul sandbox 's: # 2.080.739: Sederhanakan metode menonaktifkan tab vertikal dengan hanya mengubah $form['additional_settings']['#type']ke'fieldset' .

Sk8erPeter
sumber
Solusi luar biasa, @ Sk8erPeter. Saya ingin tahu apakah mungkin untuk menyembunyikan pengaturan tambahan tanpa pengaturan '#access' = FALSE, karena ini kehilangan nilai yang akan ditetapkan oleh pengaturan default, seperti alias url dan status yang dipublikasikan.
Jav
0

Elemen yang dapat di-render saat ini tidak didukung, dan mengakui pada halaman proyek bahwa itu berbenturan dengan beberapa modul kontribusi lainnya sehingga saya tidak akan bergantung pada itu untuk lokasi produksi.

Pertanyaan tentang cara menonaktifkan tab vertikal sepenuhnya ditangani di utas ini .

Dripman telah membuat modul kotak pasir sederhana untuk menonaktifkan tab vertikal sepenuhnya.

Tergantung pada tingkat keterlibatan yang Anda inginkan dengan pengkodean, modul Dripman harus mudah disesuaikan untuk menjadi selektif berdasarkan bidang / peran.

Permintaan maaf untuk tumpang tindih dengan jawaban singkat oleh @nicoz

autopoietic
sumber
0

Anda dapat menggunakan modul Visibilitas Tab Vertikal .

Modul ini membantu mengelola visibilitas tab vertikal pada tipe konten tambahkan / edit formulir.

Untuk mengelola visibilitas tab vertikal pada tipe konten, tambahkan / edit formulir. cukup kunjungi /admin/config/user-interface/vertical-tabs-visibility halaman dan pilih tipe konten. Tab vertikal pada simpul tambah / edit bentuk akan dinonaktifkan untuk jenis konten yang diperiksa.

Modul saat ini di kotak pasir

milkovsky
sumber
0

Untuk kasus penggunaan saya, saya mencoba untuk menonaktifkan tab vertikal yang sedang diterapkan pada bagian Opsi penerbitan pada formulir edit simpul (karena ini adalah satu-satunya fieldset yang dapat diakses oleh set pengguna tertentu):

// Place somewhere in MYMODULE_form_alter()...
$form['additional_settings']['#type'] = 'fieldset';
$form['additional_settings']['#collapsible'] = FALSE;
$form['options']['#collapsible'] = FALSE;

Untuk klarifikasi, Anda tidak hanya perlu mengatur additional_settings #collapsibleke FALSE, elemen apa pun di dalamnya juga harus memiliki elemen #collapsible set toFALSE , in my case that was theoptions`.

tyler.frankenstein
sumber