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


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.