테마에서 사용자 정의 영역을 작성하는 방법


58

사이트 전체에 새로운 영역을 추가하고 싶습니다. 이 새로운 지역을 내 테마로 만드는 과정을 설명하고 가능한 경우 새로운 사용자 정의 지역을 추가하기 위해 일반화하십시오.


세부 블로그 : goo.gl/kD3TZu
Suresh Kamrushi

답변:


68

테마 .info 파일에서 영역을 정의합니다. 참조 : .info 파일의 구조

그런 다음 관련 템플릿 태그를 page.tpl.php 파일에 넣어야합니다.

예를 들어 sidebar테마 .info 파일에서 영역을 정의한 경우 <?php print render($page['sidebar']); ?>page.tpl.php의 관련 위치에 다음을 추가 합니다.


6
테마에 page.tpl.php 파일이 없으면 시스템 모듈에서 테마로 기본값을 복사하고 해당 사본을 수정할 수 있습니다.
Mikey P

5
Omega는 page.tpl.php 부분이 필요하지 않으며 .info 및 CLEAR CACHES에서 지역을 선언하면됩니다.
Capi Etheriel

20

다른 요점 : 필요한 지역을 놓치지 마십시오!

regions[content] = Content
regions[help] = Help
regions[page_top] = Page top
regions[page_bottom] = Page bottom

이에 대한 자세한 내용은 http://drupal.org/update/themes/6/7#closure 에서 찾을 수 있습니다 .

이 시점에서 명확히하려면 : 자신의 지역을 정의하는 경우 필요한 지역을 포함하여 사용중인 모든 지역을 정의해야합니다. 다시 말해, 추가 영역을 정의 할 수는 없습니다. 정의한 영역을 모두 정의해야합니다.


9

Drupal 7 테마에 대한 영역을 작성하는 것은 Drupal 6 영역에 대한 영역을 작성하는 것과 다르지 않습니다. Drupal 7과 이전 버전의 차이점은 본질적으로 다음과 같습니다.

  • 영역은 mytheme_regions()Drupal 5에서와 같이 함수를 사용하여 정의되지 않지만 regions[]지시문을 사용하여 mytheme.info에 정의되어 있으며 Drupal 6 테마에서도 수행됩니다.
  • 영역은 render()변수의 내용을 인쇄하는 대신 Drupal 함수를 사용하여 렌더링됩니다 .

기본 Drupal 7 지역은 다음과 같습니다.

regions[header] = Header
regions[highlighted] = Highlighted
regions[help] = Help
regions[content] = Content
regions[sidebar_first] = Left sidebar
regions[sidebar_second] = Right sidebar
regions[footer] = Footer

Drupal 7 핵심 테마에는 이제 Drupal 6의 사명 선언문 영역과 동일한 디스플레이를 사용하는 '강조 표시됨'이라는 영역이 포함됩니다. 또한 기본적 $help으로 Drupal 6에서 사용 하는 변수 와 동일한 내용을 갖는 'help'라는 영역이 포함됩니다 .


4

테마 영역은 테마 .info 파일에 정의되어 있습니다 ( 문서 참조) . regions[corner] = Corner코너 영역을 얻기 위해 라인을 추가하십시오 .

그런 다음 page.tpl.php 파일을 편집 <php print render($corner); ?>하고 영역을 표시 할 위치를 추가 해야합니다. 테마에 page.tpl.php가없는 경우 기본 테마 또는 시스템 모듈에서 복사하십시오.

일반적인 함정 :

  • theme.info 파일에 선언 된 영역이없는 경우 Drupal 기본 영역을 사용하고있었습니다. 추가하려면 기본 지역을 다시 선언해야합니다. 물론 모든 지역을 제거 할 수 있지만 필요한 지역을 지원하십시오. 문서를 다시 참조 하십시오.

  • .info 파일 변경 또는 테마에 새 파일 추가 (예 : page.tpl.php)는 캐시를 지운 후에 만 ​​나타납니다.

  • 매우 인기있는 기본 테마 인 Omega는 .info 파일 만 page.tpl.php를 변경할 필요가 없습니다. 그러나 UI의 테마 설정을 방문하여 지역을 영역에 할당해야합니다.


이것은 일반적인 함정으로 답변을 마무리합니다.
Capi Etheriel

regions[content] = ContentD7에서 유일하게 필요한 지역은? drupal.org/node/171205#regions는 이를 암시하는 것 같다,하지만 drupal.org/node/171224 필요한 지역은 말한다 content, help, page_toppage_bottom
짐 개리슨에게

Drupal이 어떤 지역을 검사하는지는 모르겠지만 content매우 중요합니다. help은 (도움말 메시지를 출력하기 위해) 코어에서 지원되며 page_bottom아마도 하단 js가 인쇄되는 곳이며 page_top코어 툴바와 같은 탐색 막대에 사용되는 것으로 보입니다.
Capi Etheriel

2

다음 단계에 따라 테마에서 사용자 정의 영역을 작성하십시오.

  1. theme.info 파일로 이동하여이 행을 추가하십시오.

    regions[machine_name_of_your_region] = Name of your region
  2. 노드 템플릿에서도 영역 블록을 호출 할 수도 있지만 일반적으로 테마의 페이지 템플릿에 영역을 추가합니다. 일반적으로 page.tpl.php이거나 다른 페이지에 대한 사용자 정의 템플릿 파일이있는 경우 해당 파일도 편집하십시오. 새 영역은 새 영역을 추가 한 템플릿 주위에 구축 된 페이지에만 나타납니다. 새 지역을 표시 할 위치에 붙여 넣습니다.

    <?php if ($page['machine_name_of_your_region']): ?>
      <div id="sidebar-first" class="column sidebar"><div class="section">
      <?php print render($page['machine_name_of_your_region']); ?>
      </div></div> <!-- /.section, /#sidebar-first -->
     <?php endif; ?>
    
  3. 구성-성능-모든 캐시 지우기


0

테마에서 새 지역 만들기

두 파일로 정의하면됩니다.

  • Theme.info
  • Page.tpl.php

Theme.info

;;;;;;;;;;;;;;;;;;;;;
;; Regions
;;;;;;;;;;;;;;;;;;;;;

regions[navigation]      = 'Navigation'
regions[header]          = 'Top Bar'
regions[highlighted]     = 'Highlighted'
regions[new_region_name] = 'Region Name' ;; Add New Region

Page.tpl.php

이제이 지역을 렌더링

  <?php if ($page['new_region']): ?>
      <div class="new_region_class">
        <?php print render($page['new_region']); ?>
     </div>
  <?php endif; ?>

이제 모든 캐시를 지 웁니다. 이제 테마에 새로운 지역이 있습니다. 블록 구성 페이지에서 볼 수 있습니다.

자세한 내용은 http://drupal.org/node/171205를 방문 하십시오.

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