노드 템플릿 내에서 영역을 인쇄 할 수 있습니까?


25

노드 템플릿 내에서 영역을 인쇄 할 수 있습니까? 아니면 영역이 페이지 템플릿으로 엄격하게 제한되어 있습니까?

답변:


48

템플릿 내부의 영역을 인쇄 할 수 있지만 템플릿의 상자에서 사용할 수는 없습니다 node.tpl.php. 그것들을 사용 가능하게하기 위해, node.tpl.php모든 지역 내용을 포함 할 템플릿 에서 사용할 새로운 변수를 만들 것입니다.

새로운 템플릿 변수 생성은 전처리 기능을 사용하여 수행됩니다. 테마 template.php파일에서 다음과 같은 함수를 작성하십시오.

function mytheme_preprocess_node(&$variables) {
}

교체 mytheme테마의 짧은 이름. 이제 Drupal이이 새로운 전처리 기능을 인식하려면 사이트의 테마 레지스트리를 다시 빌드해야합니다. 구성개발성능 으로 이동 하여 상단의 "모든 캐시 지우기"버튼을 누르는 것처럼 간단 합니다.

이제 전처리 기능이 작동하는 방식은 $variables템플릿의 사용 가능한 변수에 해당하는 배열을 포함하는 것입니다. 예를 들어,에서 node.tpl.php, $submitted저자의 선별이 포함되어 있습니다. 위의 전처리 기능에서 찾을 수 있습니다 $variables['submitted'].

모든 지역을 포함하는 page.tpl.php이라는 배열이있는 곳의 내용을 모방하려면 $page을 채우고 싶습니다 $variables['page'].

문제는 $pagein node.tpl.php이 이미 true / false 값으로 채워져 노드 자체를 보거나 목록에서보고 있는지 알 수 있다는 것입니다.

따라서 이름 충돌을 피하려면 $region대신 채우십시오 .

function mytheme_preprocess_node(&$variables) {

  // Get a list of all the regions for this theme
  foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) {

    // Get the content for each region and add it to the $region variable
    if ($blocks = block_get_blocks_by_region($region_key)) {
      $variables['region'][$region_key] = $blocks;
    }
    else {
      $variables['region'][$region_key] = array();
    }
  }
}

그런 다음 테마 node.tpl.php템플릿에서 다음을 수행하여 모든 영역을 렌더링 할 수 있습니다.

<?php print render($region['sidebar_first']); ?>

sidebar_first렌더링하려는 지역의 이름은 어디에 있습니까 ?


1
:) 드루팔 7 마지막으로 작동하는 솔루션
에드워드 루카

4
나를 위해 일한 빠르고 더러운 솔루션도 <?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>있습니다. 여기에서 : webomelette.com/add-region-node-template
Darragh Enright

이 솔루션은 훌륭합니다. page.tpl.php에있는 대신 node.tpl.php의 영역을 인쇄하는 데 가장 적합한시기에 대한 예를 들어 주시겠습니까?
Randell

디자인에 따라 다릅니다. 때로는 레이아웃이 사이드 바를 노드가 아닌 노드 div 안에 있으면 테마를 세우기가 훨씬 쉬운 곳에 배치 할 수 있습니다.
rooby

적절한 지역 래퍼를 잊지 마십시오! 참조를 위해 system_page_alter () 를 참조하십시오. 그 기억 block_get_blocks_by_region()반환을 블록의 배열을하고 지역으로 렌더링 할 경우, 당신은 지역 래퍼를 추가해야합니다.
SiliconMind
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.