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?

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.


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 .


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 :)


1
Ce que signifie OP, c'est qu'il affiche par programme le bloc, mais aucun lien contextuel n'est ajouté.
Bart
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.