Làm thế nào bạn có thể để một biên tập viên chỉnh sửa văn bản trong một khối, nhưng không thay đổi cấu hình khác, khi di chuyển khối từ vùng này sang vùng khác?
Làm thế nào bạn có thể để một biên tập viên chỉnh sửa văn bản trong một khối, nhưng không thay đổi cấu hình khác, khi di chuyển khối từ vùng này sang vùng khác?
Câu trả lời:
Trong Drupal, chỉ những người dùng có quyền quản trị các khối mới có thể thay đổi cài đặt khối, bao gồm cả khối được gán.
Theo tôi biết, không có mô-đun nào cho phép gán cho người dùng quyền cấp phép chi tiết hơn. Bạn nên viết mô-đun tùy chỉnh của riêng bạn chỉ hiển thị các trường mà người dùng được phép chỉnh sửa.
Ví dụ: đoạn mã sau sẽ thay đổi việc xây dựng biểu mẫu từ block_admin_configure () , chức năng xây dựng biểu mẫu cấu hình cho bất kỳ khối nào, để cho phép người dùng có quyền "chỉnh sửa tiêu đề khối" để chỉnh sửa tiêu đề khối.
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');
}
}
Hàm này là việc thực hiện hook_form_FORM_ID_alter () được tạo cho một mô-đun có tên mymodule.module.
Các trường cho cài đặt vùng (vùng chủ đề mà một khối là đầu ra) được chứa trong $form['regions']
; Bộ trường chứa một trường chọn cho từng trường được kích hoạt.
Để chỉ hiển thị trường được đặt cho người dùng có quyền "chỉnh sửa vùng khối", bạn có thể sử dụng mã sau đây.
function mymodule_form_block_admin_configure_alter(&$form, &$form_state, $form_id) {
if (isset($form['regions'])) {
$form['regions']['#access'] = user_access('edit block regions');
}
}
Người dùng có quyền quản trị các khối có thể thay đổi vùng được gán cho các khối từ http://example.com/admin/structure/block . Để không cho phép người dùng không có quyền "chỉnh sửa vùng khối" để truy cập trang đó, bạn nên thay đổi trình xử lý truy cập của menu đó và thay thế trình xử lý truy cập mặc định bằng trình xử lý tùy chỉnh sẽ trả về FALSE
khi người dùng không có quyền đó.
Để biết thêm thông tin, hãy xem hook_menu và hook_menu_alter () .
Xem mô-đun truy cập khối .
Mô-đun này thêm một bộ quyền toàn cầu để tạo, xem, di chuyển, bật, tắt và định cấu hình các khối cũng như quyền ở cấp khối riêng lẻ.
Sau khi trở lại câu hỏi này sau một năm hoặc lâu hơn, có hai phương pháp rất đơn giản.
Tạo một khối và đặt đoạn mã sau vào thân khối:
<?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);
?>
Hoặc bạn có thể tạo khối xem và bộ lọc trên id nút.
Bây giờ bạn cho phép ai đó chỉnh sửa loại nội dung nhưng không được phép tạo hoặc xóa nó.
Một giải pháp đơn giản tôi muốn giới thiệu là kiểm tra mô-đun Hộp . Mô-đun này sẽ cung cấp một tùy chọn chỉnh sửa nội tuyến đẹp mắt (thông qua AJAX) cho các khối, điều này sẽ giúp các biên tập viên dễ dàng thay đổi văn bản trong các khối. Các quyền vẫn cần phải là "quản trị khối" cho các biên tập viên, nhưng vì giờ họ sẽ có thể chỉnh sửa các khối nội tuyến nên thực sự không cần phải đến trang cấu hình khối.
Bây giờ nếu bạn vẫn khăng khăng xóa quyền truy cập vào trang cấu hình khối đó, bạn chỉ có thể thực hiện một thay đổi menu đơn giản thay đổi quyền cần thiết cho trang cấu hình khối, chẳng hạn như mã sau đây.
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');
}
Các Bean Module này là một lựa chọn tốt để trả lời câu hỏi này. Đây là một trích dẫn về trang dự án của nó:
Hãy nghĩ về Bean như một phương thức để cung cấp các loại mới (so với nút này sẽ là một loại nội dung) sau đó cung cấp giao diện thêm nội dung để tạo nhiều khối như bạn yêu cầu (xem ảnh chụp màn hình bên dưới). Nội dung bean sau đó có thể được đặt xung quanh trang web giống như bất kỳ khối nào khác.
Kết hợp với các tùy chọn có sẵn để cấp quyền Bean phù hợp , nó sẽ cung cấp cho bạn rất nhiều tính linh hoạt về cách chính xác bạn muốn sử dụng mô-đun (tuyệt vời) này trong trường hợp cụ thể của bạn: đối với mỗi khối riêng lẻ được tạo bằng mô-đun BEAN, bạn có thể sử dụng trang Quyền thông thường (tại admin/people/permissions
) để cấp quyền truy cập Thêm / Chỉnh sửa / Xem / Xóa cho các vai trò đã chọn.
Module này cũng hoạt động tuyệt vời khi kết hợp với các UUID và tính năng UUID tích hợp mô-đun. Và sau khi bạn làm quen với mô-đun Bean, bạn có thể tìm thấy các trường hợp khác trong trang web của mình, nơi bạn cũng muốn sử dụng mô-đun này (bằng cách nào đó bù lại thực tế là bạn cần thêm mô-đun khác).
Video hướng dẫn mô-đun Drupal Bean - sử dụng Bean Admin UI cung cấp một giới thiệu tuyệt vời để thực sự hiểu sức mạnh của mô-đun này và loại điều bạn có thể làm với nó (chỉ bằng cách sử dụng các kỹ thuật xây dựng trang web, không có mã hóa tùy chỉnh liên quan). Nó cũng cho thấy mô-đun Bean biến đổi các khối Drupal thành các thực thể có thể thực hiện được.
Mô-đun này chỉ bắt đầu từ D7 (vì "các thực thể" tất nhiên chỉ được giới thiệu trong D7) và đã có hơn 22 nghìn lượt cài đặt được báo cáo. Những người chưa sử dụng nó chắc chắn nên bắt đầu xem xét nó để chuẩn bị nâng cấp lên D8 một ngày nào đó. Bởi vì đây là những gì hiện đang được hiển thị trên trang dự án của nó (Tôi đã thêm đánh dấu đậm ở đây):
Mô-đun này đã được bao gồm với lõi 8 Drupal . Tham khảo vấn đề này để biết thêm thông tin.