html.tpl.php에서 영역 인쇄


10

page.tpl.php와 page-front.tpl.php 사이에서 변경되지 않기 때문에 html.tpl.php 템플릿의 일부 영역을 출력해야합니다 (두 이름 만 지정). 기본적으로 코드 중복을 피하고 싶습니다.

그러나 html.tpl.php에는 region과 관련된 것이 없으며 drupal_get_region_content를 사용하여 아무것도 검색 할 수 없습니다 (매개 변수가 있거나없는 경우 빈 배열을 반환합니다).

아이디어?


drupal_set_region_content()지역 내용을 설정 하셨습니까 ?
kiamlaluno

2
그런 기능은 없습니다. 어쩌면 당신은 의미 drupal_add_region_content()하지만 그 점 을 알지 못합니다 : 블록 관리 인터페이스를 통해 지역의 내용을 설정했습니다.
Morpheu5

1
그렇습니다 drupal_add_region_content().
kiamlaluno

답변:


18

나는 이것을 다음과 같이 해결했다.

function mytheme_preprocess_html(&$variables) {
    $variables['region_name'] = block_get_blocks_by_region('region_name');
}

그리고 나는 할 수 있었다

<?php print render($region_name) ?>

에코를 사용해야하는 이유 물론 작동합니다.
SDMulroy

물론, 모듈 또는 공개 주제를 구현하는 경우 커뮤니티 표준을 준수해야합니다. 이것은 내 고객이 독점적으로 사용하는 사용자 지정 테마였습니다.
Morpheu5

나는 이것이 매우 오래된 게시물이라는 것을 알고 있지만 대답의 저자가 문제에 느리게 대답하는 대답을 받아들이는 것은 나쁜 판단이라고 생각합니다. 예를 들어 추가 할 함수를 제공하지만 모든 독자가이 코드가 어디에 있어야하는지 마법처럼 알고 있다고 가정합니다. 그것은 게으른 부분이며 초보자 drupal 사용자 / 개발자에게 아무것도 제공하지 않기 때문에 이것을 다운 투표하고 있습니다.
가장자리 잘라 내고

귀하의 의견과 초보자가 완전한 설명을 얻지 못할 수 있다는 사실에 감사드립니다. 그러나 a) 스푼 수유는 게으른 초보자를 위해, b) (게으른 초보자가 아닌 것처럼) 문서를 신속하게 읽은 사람에게는 해당 기능의 배치가 비교적 분명해야합니다. 그렇지 않은 경우 적절한 이유로 매뉴얼이 있습니다. 내 질문 및 답변은 ​​Drupal 테마에 대한 특정 기본 지식을 가정 할 수있는 수준의 문제를 다룹니다. 또한이 사이트는 Q & A 사이트이며 문서 사이트는 옆집에 있습니다.
Morpheu5

1
@Skitties 새로운 사용자가 질문에 표시된 것과 같은 전처리 기능이 무엇인지 알 수 없기 때문에 여기에서 설명서를 복제 할 수 없습니다. 그것은 심지어 질문의 일부가 아닙니다. 사용자가 특정 질문 abput 전처리 기능이있는 경우 새로운 질문을합니다.
kiamlaluno

2

drupal_get_region_content()에 대한 이전 호출로 설정된 내용을 반환 drupal_add_region_content()하지만 block_page_build ()를 통해 페이지에서 렌더링되는 블록의 내용은 포함하지 않습니다 .

Drupal 소스 코드에서 "drupal_add_region_content"를 검색하면 다음과 같은 함수가 호출됩니다.

  • drupal_get_region_content()
  • install_display_output()
  • template_preprocess_maintenance_page()
  • update_task_list()

관리 페이지에서 블록에 설정 한 것은 블록이 렌더링 될 영역이지만 해당 내용이 추가되지 않습니다 drupal_add_region_content(). 사실, 위에 나열된 함수 중 drupal_add_region_content()Drupal 설치를 테스트하기위한 코드를 제외하고를 호출하는 유일한 함수 인 함수 는 블록 내용을 렌더링 / 추가하는 것입니다.

자신의 코드로 블록을 렌더링해야하는 경우에 사용 된 코드를 확인해야합니다 block_page_build(). 특히, 이것은 아마도 당신에게 더 유용한 코드입니다.

  // Fetch a list of regions for the current theme.
  $all_regions = system_region_list($theme);

  $item = menu_get_item();
  if ($item['path'] != 'admin/structure/block/demo/' . $theme) {
    // Load all region content assigned via blocks.
    foreach (array_keys($all_regions) as $region) {
      // Assign blocks to region.
      if ($blocks = block_get_blocks_by_region($region)) {
        $page[$region] = $blocks;
      }
    }
    // …
  }

처음 두 줄은 표시되는 페이지가 테마 영역의 위치를 ​​표시하는 데 사용되는 데모 페이지가 아닌지 확인합니다.

블록을 다른 방식으로 렌더링해야하는 경우 테마에서 theme_block () 을 재정의 하거나 사용자 정의 block.tpl.php 템플릿 파일을 만드는 것이 더 좋습니다. 블록이 렌더링되는 방식을 변경하는 또 다른 방법은 블록에 대한 사전 프로세스 함수 ( hook_preprocess_block () )를 사용하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.