Wie rendere ich Kontextlinks für Blöcke, die ich in meinem Code rendere?


11

Ich habe ein Blockthema und einen Inhalt mit geladen module_invoke()und render()zum Rendern verwendet. Ich möchte Kontextlinks für diesen Block verwenden. Wie kann ich sie auch rendern?

Dies ist der Code, den ich in der Vorlage page - front.tpl.php verwende.

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

Welchen Code soll ich stattdessen verwenden?

Antworten:


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

Schade, dass wir private Funktionen aus dem Blockmodul (_ * ()) verwenden müssen, um dies zu erreichen.


Für das OP-Beispiel wäre es also: $ block = block_load ('block', '4');
Cameron

12

Barts Antwort gibt eine Warnung zu strengen Standards aus (standardmäßig in PHP 5.4 aktiviert). Um dies zu beheben, verwenden Sie einfach eine Zwischenvariable für das renderbare Array:

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

Der Grund für die Warnung ist, dass die drupal_renderFunktion erwartet, dass ihr Parameter eine Referenz ist. Es hat die Unterschrift drupal_render(&$elements). Weitere Informationen finden Sie in der Antwort auf diese ähnliche Frage .


2

Kontextlinks sind hilfreich und sehr einfach zu implementieren. Für Ihren Anwendungsfall müssen Sie implementieren hook_block_view_alter(), um das Element #contextual_links an Ihre Anforderungen anzupassen. Diese Referenzen helfen Ihnen dabei:

GL :)


1
Was OP bedeutet, ist, dass er den Block programmgesteuert anzeigt, aber keine Kontextverknüpfungen hinzugefügt werden.
Bart
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.