Làm cách nào để kết xuất các liên kết theo ngữ cảnh cho các khối tôi kết xuất trong mã của mình?


11

Tôi đã tải một chủ đề khối và nội dung với module_invoke()và được sử dụng render()để hiển thị chúng. Tôi muốn sử dụng các liên kết theo ngữ cảnh cho khối này. Làm thế nào tôi có thể làm cho họ quá?

Đây là mã tôi đang sử dụng insde trang - front.tpl.php mẫu.

$block = module_invoke('block', 'block_view', '4);
print render($block);

Tôi nên sử dụng mã nào?

Câu trả lời:


16
$block = block_load('module', 'delta');
print drupal_render(_block_get_renderable_array(_block_render_blocks(array($block))));

Quá tệ, chúng tôi phải sử dụng các chức năng riêng tư từ mô-đun khối (_ * ()) để đạt được điều này.


Vì vậy, đối với ví dụ OP, nó sẽ là: $ block = block_load ('block', '4');
Cameron

12

Câu trả lời của Bart sẽ đưa ra cảnh báo Tiêu chuẩn nghiêm ngặt (được bật theo mặc định trong PHP 5.4). Để khắc phục điều này, chỉ cần sử dụng một biến trung gian cho mảng kết xuất:

$block = block_load('module', 'delta');
$renderable_array = _block_get_renderable_array(_block_render_blocks(array($block)));
print drupal_render($renderable_array);

Lý do cảnh báo xảy ra là vì drupal_renderhàm dự kiến ​​tham số của nó là tham chiếu. Nó có chữ ký drupal_render(&$elements). Để biết thêm thông tin xem câu trả lời cho câu hỏi tương tự này .


2

Liên kết bối cảnh là hữu ích và thực sự dễ dàng để thực hiện. Đối với trường hợp sử dụng của bạn, bạn cần triển khai hook_block_view_alter()để thay đổi mục #contextual_links cho phù hợp với nhu cầu của bạn. Những tài liệu tham khảo này sẽ giúp bạn hiểu:

GL :)


1
Điều OP có nghĩa là anh ta lập trình hiển thị khối, nhưng các liên kết theo ngữ cảnh không được thêm vào.
Bart
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.