Tôi đang tìm cách để ẩn / hiển thị một liên kết từ menu chính nếu người dùng hiện tại có quyền cụ thể. Mục menu đã được tạo và mục menu liên kết đến một nút được điều khiển bởi hook_node_access ().
Tôi đang tìm cách để ẩn / hiển thị một liên kết từ menu chính nếu người dùng hiện tại có quyền cụ thể. Mục menu đã được tạo và mục menu liên kết đến một nút được điều khiển bởi hook_node_access ().
Câu trả lời:
Theo mặc định, Drupal sẽ ẩn tất cả các mục menu mà người dùng không có quyền truy cập, do đó, điều dễ nhất để làm là yêu cầu quyền truy cập được chọn cho trang mà mục menu đang liên kết đến.
node_access
để lấy quyền truy cập. Vì vậy, chỉ cần thực hiện hook_node_access()
sẽ không làm điều đó.
Những gì bạn có thể làm là thay đổi cuộc gọi lại truy cập được liên kết với "nút /% nút" bằng cách sử dụng hook_menu_alter () , sau đó viết mã cho cuộc gọi lại truy cập của bạn dựa trên mã của node_access () . Có những trường hợp cụ thể mà bạn vẫn muốn xử lý như node_access()
vậy; ví dụ: người dùng có quyền "bỏ qua truy cập nút" sẽ luôn truy cập vào nút.
function mymodule_menu_alter(&$items) {
if (isset($items['node/%node'])) {
$items['node/%node']['access callback'] = 'mymodule_node_access';
}
}
Hãy xem xét rằng cuộc gọi lại truy cập quyết định ai có thể nhìn thấy một liên kết và ai có thể truy cập một trang khi người dùng viết URL trực tiếp trên thanh địa chỉ trình duyệt.
Bạn có thể muốn xem xét mô-đun drupal menu_item_visibility
Để trích dẫn trang dự án:
Ví dụ: nếu bạn muốn tạo liên kết 'Tài khoản của tôi' trỏ đến / người dùng, cả người dùng ẩn danh và người dùng đã đăng ký đều có quyền truy cập vào đường dẫn / người dùng, vì vậy cả hai sẽ thấy liên kết, ngay cả khi người dùng ẩn danh về mặt kỹ thuật không có tài khoản . Sử dụng mô-đun này sẽ cho phép bạn chỉ hiển thị liên kết 'Tài khoản của tôi' cho người dùng đã đăng ký và ẩn nó khỏi người dùng ẩn danh.
Mô-đun sử dụng cùng một giao diện người dùng được sử dụng cho các cài đặt hiển thị khối để làm quen.
Hoặc mô-đun menu_view - cung cấp cách tiếp cận dựa trên Chế độ xem để tạo menu (mà tôi nghĩ bao gồm dựa trên người dùng)