ฉันจะแสดงลิงค์บริบทสำหรับบล็อกที่ฉันแสดงในรหัสของฉันได้อย่างไร


11

ฉันโหลดหัวเรื่องบล็อกและเนื้อหาด้วยmodule_invoke()และใช้render()สำหรับการแสดงผล ฉันต้องการใช้ลิงก์เชิงบริบทสำหรับบล็อกนี้ ฉันจะแสดงมันได้อย่างไร

นี่คือรหัสที่ฉันใช้ insde หน้า - front.tpl.php แม่แบบ

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

ฉันควรใช้รหัสใดแทน

คำตอบ:


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

น่าเสียดายที่เราต้องใช้ฟังก์ชั่นส่วนตัวจากโมดูลบล็อก (_ * ()) เพื่อให้ได้สิ่งนี้


ดังนั้นสำหรับตัวอย่าง OPs มันจะเป็น: $ block = block_load ('block', '4');
คาเมรอน

12

คำตอบของ Bart จะให้คำเตือน Standard Strict (เปิดใช้งานโดยค่าเริ่มต้นใน PHP 5.4) ในการแก้ไขปัญหานี้ให้ใช้ตัวแปรกลางสำหรับอาเรย์ที่สามารถเรนเดอร์ได้:

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

เหตุผลที่คำเตือนเกิดขึ้นเนื่องจากdrupal_renderฟังก์ชันคาดว่าพารามิเตอร์ของมันจะเป็นข้อมูลอ้างอิง drupal_render(&$elements)มันมีลายเซ็น สำหรับข้อมูลเพิ่มเติมดูคำตอบของคำถามที่คล้ายกันนี้


2

ลิงก์บริบทมีประโยชน์และใช้งานง่าย สำหรับกรณีการใช้งานของคุณคุณต้องนำhook_block_view_alter()ไปใช้เพื่อเปลี่ยนรายการ #contextual_links ให้เหมาะกับความต้องการของคุณ ข้อมูลอ้างอิงเหล่านี้จะช่วยคุณได้:

GL :)


1
OP หมายถึงอะไรว่าเขาแสดงบล็อกโดยทางโปรแกรม แต่ไม่มีการเพิ่มลิงก์บริบท
บาร์ต
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.