코드에서 렌더링하는 블록에 대한 컨텍스트 링크를 어떻게 렌더링합니까?


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

이를 달성하기 위해 블록 모듈 (_ * ())의 전용 함수를 사용해야합니다.


따라서 OPs 예제의 경우 $ block = block_load ( 'block', '4');
카메론

12

Bart의 답변은 엄격한 표준 경고를 제공합니다 (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가 의미하는 것은 프로그래밍 방식으로 블록을 표시하지만 컨텍스트 링크는 추가되지 않는다는 것입니다.
Bart
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.