Comment rendre les liens contextuels pour les blocs que je rends dans mon code?

11

J'ai chargé un sujet et un contenu de bloc avec module_invoke()et utilisé render()pour les rendre. Je souhaite utiliser des liens contextuels pour ce bloc. Comment puis-je les rendre aussi?

C'est le code que j'utilise dans le modèle page - front.tpl.php.

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

Quel code dois-je utiliser à la place?

Pedram Behroozi
la source

Réponses:

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

Dommage, nous devons utiliser des fonctions privées du module de bloc (_ * ()) pour y parvenir.

Bart
la source
Ainsi, pour l'exemple OP, ce serait: $ block = block_load ('block', '4');
Cameron
12

La réponse de Bart donnera un avertissement Strict Standards (activé par défaut en PHP 5.4). Pour résoudre ce problème, utilisez simplement une variable intermédiaire pour le tableau pouvant être rendu:

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

La raison pour laquelle l'avertissement se produit est que la drupal_renderfonction s'attend à ce que son paramètre soit une référence. Il a la signature drupal_render(&$elements). Pour plus d'informations, voir la réponse à cette question similaire .

Chris M.
la source
2

Les liens contextuels sont utiles et très faciles à mettre en œuvre. Pour votre cas d'utilisation, vous devez implémenter hook_block_view_alter()pour modifier l'élément #contextual_links en fonction de vos besoins. Ces références vous aideront:

GL :)

ronaldofs
la source
1
Ce que signifie OP, c'est qu'il affiche par programme le bloc, mais aucun lien contextuel n'est ajouté.
Bart