it-swarm.com.de

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

Ich habe einen Block Betreff und Inhalt mit module_invoke() geladen 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?

11
Pedram Behroozi
$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.

16
Bart

Barts Antwort gibt eine Warnung zu strengen Standards aus (standardmäßig aktiviert in PHP 5.4). 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 Funktion drupal_render Erwartet, dass ihr Parameter eine Referenz ist. Es hat die Signatur drupal_render(&$elements). Weitere Informationen finden Sie in der Antwort auf diese ähnliche Frage .

12
Chris M.

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

GL :)

2
ronaldofs