답변:
템플릿 내부의 영역을 인쇄 할 수 있지만 템플릿의 상자에서 사용할 수는 없습니다 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']
.
문제는 $page
in 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
렌더링하려는 지역의 이름은 어디에 있습니까 ?
<?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>
있습니다. 여기에서 : webomelette.com/add-region-node-template
block_get_blocks_by_region()
반환을 블록의 배열을하고 지역으로 렌더링 할 경우, 당신은 지역 래퍼를 추가해야합니다.