Como renderizo links contextuais para blocos que renderizo no meu código?

11

Carreguei um assunto e conteúdo do bloco module_invoke()e o usei render()para renderizá-los. Eu quero usar links contextuais para este bloco. Como posso renderizá-los também?

Este é o código que estou usando na página - modelo front.tpl.php.

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

Que código devo usar?

Pedram Behroozi
fonte

Respostas:

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

Pena que temos que usar funções privadas do módulo de bloco (_ * ()) para conseguir isso.

Bart
fonte
Portanto, para o exemplo dos OPs, seria: $ block = block_load ('block', '4');
Cameron
12

A resposta de Bart fornecerá um aviso de Padrões Estritos (ativado por padrão no PHP 5.4). Para corrigir isso, use uma variável intermediária para a matriz renderizável:

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

A razão pela qual o aviso ocorre é porque a drupal_renderfunção espera que seu parâmetro seja uma referência. Tem a assinatura drupal_render(&$elements). Para mais informações, consulte a resposta a esta pergunta semelhante .

Chris M.
fonte
2

Links contextuais são úteis e realmente fáceis de implementar. Para o seu caso de uso, você precisa implementar hook_block_view_alter()para alterar o item #contextual_links para atender às suas necessidades. Essas referências irão ajudá-lo:

GL :)

ronaldofs
fonte
1
O que significa OP é que ele exibe programaticamente o bloco, mas os links contextuais não são adicionados.
21413 Bart Bart