Bagaimana cara membuat tautan kontekstual untuk blok yang saya render dalam kode saya?

11

Saya memuat subjek dan konten blok module_invoke()dan digunakan render()untuk merendernya. Saya ingin menggunakan tautan kontekstual untuk blok ini. Bagaimana saya bisa membuat mereka juga?

Ini adalah kode yang saya gunakan di halaman - front.tpl.php template.

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

Kode apa yang harus saya gunakan?

Pedram Behroozi
sumber

Jawaban:

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

Sayang sekali kita harus menggunakan fungsi pribadi dari modul blok (_ * ()) untuk mencapai ini.

Bart
sumber
Jadi untuk contoh OPs akan menjadi: $ block = block_load ('block', '4');
Cameron
12

Jawaban Bart akan memberikan peringatan Standar Ketat (diaktifkan secara default di PHP 5.4). Untuk memperbaikinya cukup gunakan variabel perantara untuk array yang dapat diurai:

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

Alasan peringatan itu terjadi adalah karena drupal_renderfungsi mengharapkan parameternya menjadi referensi. Itu memiliki tanda tangan drupal_render(&$elements). Untuk informasi lebih lanjut, lihat jawaban untuk pertanyaan serupa ini .

Chris M.
sumber
2

Tautan kontekstual sangat membantu dan sangat mudah diimplementasikan. Untuk kasus penggunaan Anda, Anda perlu menerapkan hook_block_view_alter()untuk mengubah item #contextual_links agar sesuai dengan kebutuhan Anda. Referensi ini akan membantu Anda:

GL :)

ronaldofs
sumber
1
Apa yang OP maksudkan adalah bahwa dia secara terprogram menampilkan blok, tetapi tautan kontekstual tidak ditambahkan.
Bart