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?
$block = block_load('module', 'delta');
print drupal_render(_block_get_renderable_array(_block_render_blocks(array($block))));
Dommage que nous devions utiliser des fonctions privées du module de bloc (_ * ()) pour y parvenir.
La réponse de Bart donnera un avertissement Strict Standards (activé par défaut dans PHP 5.4). Pour résoudre ce problème, utilisez simplement une variable intermédiaire pour le tableau de rendu:
$block = block_load('module', 'delta');
$renderable_array = _block_get_renderable_array(_block_render_blocks(array($block)));
print drupal_render($renderable_array);
La raison de l'avertissement est que la fonction drupal_render
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 .
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 :)