web-dev-qa-db-fra.com

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

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?

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

16
Bart

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 .

12
Chris M.

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

2
ronaldofs