Bagaimana Anda bisa membiarkan editor mengedit teks dalam sebuah blok, tetapi tidak membuat perubahan konfigurasi lainnya, seperti memindahkan blok dari satu daerah ke daerah lain?
Bagaimana Anda bisa membiarkan editor mengedit teks dalam sebuah blok, tetapi tidak membuat perubahan konfigurasi lainnya, seperti memindahkan blok dari satu daerah ke daerah lain?
Jawaban:
Di Drupal, hanya pengguna yang memiliki izin untuk mengelola blok yang dapat mengubah pengaturan blok, termasuk wilayah mana blok diberikan.
Sejauh yang saya tahu, tidak ada modul yang memungkinkan untuk memberikan izin yang lebih terperinci kepada pengguna. Anda harus menulis modul khusus Anda sendiri yang hanya memperlihatkan bidang-bidang yang boleh diedit pengguna.
Sebagai contoh, kode berikut akan mengubah form build dari block_admin_configure () , fungsi yang membangun form konfigurasi untuk blok apa pun, untuk mengizinkan pengguna dengan izin "edit judul blok" untuk mengedit judul blok.
function mymodule_form_block_admin_configure_alter(&$form, &$form_state, $form_id) {
if (isset($form['settings']['title'])) {
$form['settings']['title']['#access'] = user_access('edit block titles');
}
}
Fungsinya adalah implementasi hook_form_FORM_ID_alter () yang dibuat untuk modul bernama mymodule.module.
Kolom untuk pengaturan wilayah (wilayah tema di mana blok dihasilkan) terdapat dalam $form['regions']
; Set bidang berisi bidang pilih untuk masing-masing yang diaktifkan.
Untuk memperlihatkan bidang yang disetel hanya kepada pengguna dengan izin "edit blok wilayah", Anda dapat menggunakan kode berikut, misalnya.
function mymodule_form_block_admin_configure_alter(&$form, &$form_state, $form_id) {
if (isset($form['regions'])) {
$form['regions']['#access'] = user_access('edit block regions');
}
}
Pengguna dengan izin untuk mengelola blok dapat mengubah wilayah yang ditetapkan untuk blok dari http://example.com/admin/structure/block . Untuk tidak mengizinkan pengguna tanpa izin "edit blok wilayah" untuk mengakses halaman itu, Anda harus mengubah penangan akses menu itu, dan mengganti penangan akses default dengan yang kustom yang akan kembali FALSE
ketika pengguna tidak memiliki izin itu.
Untuk informasi lebih lanjut, lihat hook_menu dan hook_menu_alter () .
Lihat modul Akses Blok .
Modul ini menambahkan satu set izin global untuk membuat, melihat, memindahkan, mengaktifkan, menonaktifkan dan mengkonfigurasi blok serta izin di tingkat blok individu.
Setelah kembali ke pertanyaan ini setelah sekitar satu tahun, ada dua metode yang sangat sederhana.
Buat blok dan letakkan kode berikut di badan blok:
<?php
$node = node_load(77);//77 is the nid of the node I want to put in the block.
$node_content = node_view($node,"full");
print render($node_content);
?>
Atau Anda dapat membuat blok tampilan dan memfilter pada id node.
Sekarang Anda memberi seseorang izin untuk mengedit jenis konten tetapi tidak mengizinkan untuk membuat atau menghapusnya.
Salah satu solusi sederhana yang saya sarankan adalah memeriksa modul Boxes . Modul ini akan memberikan opsi pengeditan sebaris yang bagus (melalui AJAX) untuk blok, yang akan membuatnya sangat mudah bagi editor untuk mengubah teks dalam blok. Izin masih perlu menjadi "kelola blok" untuk editor, tetapi karena sekarang mereka dapat mengedit blok sebaris, benar-benar tidak perlu bagi mereka untuk mendapatkan ke halaman konfigurasi blok.
Sekarang jika Anda masih bersikeras untuk menghapus akses ke halaman konfigurasi blok tersebut, Anda cukup melakukan perubahan menu sederhana yang mengubah izin yang diperlukan untuk halaman konfigurasi blokir seperti kode berikut.
function hook_menu_alter(&$items) {
//Example Use Case, switching permission from "administer block" to "administer site configuration"
$items['admin/structure/block']['access arguments'] = array('administer site configuration');
}
The Bean modul adalah alternatif yang mungkin untuk menjawab pertanyaan ini. Berikut adalah kutipan tentang halaman proyeknya:
Pikirkan Bean sebagai metode untuk menyediakan tipe baru (dibandingkan dengan node, ini akan menjadi tipe konten) yang kemudian menyediakan antarmuka konten tambahan untuk membuat sebanyak mungkin blok yang Anda perlukan (lihat tangkapan layar di bawah). Konten kacang kemudian dapat ditempatkan di sekitar situs sama seperti blok lainnya.
Dikombinasikan dengan opsi yang tersedia untuk memberikan izin Bean yang sesuai , itu akan memberi Anda banyak fleksibilitas tentang bagaimana tepatnya Anda ingin menggunakan modul (hebat) ini dalam kasus spesifik Anda: untuk setiap blok individu yang dibuat dengan modul BEAN, Anda dapat menggunakan halaman khas Izin (at admin/people/permissions
) untuk memberikan Tambahkan / Edit / Lihat / Hapus akses ke peran yang dipilih.
Modul ini juga karya besar dalam kombinasi dengan UUID dan UUID Fitur Integrasi modul. Dan setelah Anda menjadi terbiasa dengan modul Bean, Anda mungkin menemukan kasus-kasus lain di situs Anda di mana Anda juga ingin menggunakan modul ini (yang entah bagaimana mengimbangi kenyataan bahwa Anda perlu menambahkan modul lain).
Tutorial video, tutorial modul Drupal Bean - menggunakan Bean Admin UI memberikan pengantar yang bagus untuk benar-benar memahami kekuatan modul ini, dan hal-hal yang dapat Anda lakukan dengannya (dengan hanya menggunakan teknik pembangunan situs, tanpa melibatkan pengkodean khusus). Ini juga menunjukkan bagaimana modul Bean mengubah blok Drupal menjadi entitas yang bisa fieldable.
Modul ini hanya dimulai pada D7 (karena "entitas" tentu saja yang hanya diperkenalkan pada D7), dan sudah memiliki lebih dari 22 ribu instalasi yang dilaporkan. Mereka yang belum menggunakannya pasti harus mulai melihatnya dalam persiapan peningkatan beberapa hari ke D8. Karena inilah yang saat ini ditampilkan di halaman proyeknya (saya menambahkan markup tebal di sini):
Modul ini telah disertakan dengan inti Drupal 8 . Lihat masalah ini untuk informasi lebih lanjut.