Come posso rendere i collegamenti contestuali per i blocchi che visualizzo nel mio codice?


11

Ho caricato un soggetto a blocchi e contenuto module_invoke()e usato render()per renderli. Voglio usare collegamenti contestuali per questo blocco. Come posso renderli anche io?

Questo è il codice che sto usando all'interno della pagina - modello front.tpl.php.

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

Quale codice dovrei invece usare?

Risposte:


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

Peccato che dobbiamo usare le funzioni private dal modulo a blocchi (_ * ()) per raggiungere questo obiettivo.


Quindi, per l'esempio dei PO sarebbe: $ block = block_load ('block', '4');
Cameron

12

La risposta di Bart fornirà un avviso sugli standard rigorosi (abilitato per impostazione predefinita in PHP 5.4). Per risolvere questo problema basta usare una variabile intermedia per l'array renderizzabile:

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

Il motivo per cui si verifica l'avviso è perché la drupal_renderfunzione prevede che il suo parametro sia un riferimento. Ha la firma drupal_render(&$elements). Per ulteriori informazioni, consultare la risposta a questa domanda simile .


2

I collegamenti contestuali sono utili e davvero facili da implementare. Per il tuo caso d'uso devi implementare hook_block_view_alter()per cambiare l'elemento #contextual_links in base alle tue esigenze. Questi riferimenti ti aiuteranno:

GL :)


1
Ciò che OP indica è che visualizza a livello di codice il blocco, ma i collegamenti contestuali non vengono aggiunti.
Bart,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.