Как отобразить контекстные ссылки для блоков, отображаемых в моем коде?


11

Я загрузил тему и контент блока module_invoke()и использовал их render()для рендеринга. Я хочу использовать контекстные ссылки для этого блока. Как я могу сделать их тоже?

Это код, который я использую для шаблона страницы - front.tpl.php.

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

Какой код я должен вместо этого использовать?

Ответы:


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

Жаль, что мы должны использовать частные функции из блочного модуля (_ * ()) для достижения этой цели.


Так что для примера OP это будет: $ block = block_load ('block', '4');
Кэмерон

12

Ответ Барта выдаст предупреждение о строгих стандартах (по умолчанию включено в PHP 5.4). Чтобы это исправить, просто используйте промежуточную переменную для визуализируемого массива:

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

Причина появления предупреждения заключается в том, что drupal_renderфункция ожидает, что ее параметр является ссылкой. У него есть подпись drupal_render(&$elements). Для получения дополнительной информации см. Ответ на этот похожий вопрос .


2

Контекстные ссылки полезны и действительно просты в реализации. Для вашего hook_block_view_alter()варианта использования вам нужно реализовать изменить элемент #contextual_links в соответствии с вашими потребностями. Эти ссылки помогут вам:

GL :)


1
OP означает, что он программно отображает блок, но контекстные ссылки не добавляются.
Барт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.