페이지 경로 / 깊이를 기반으로 BODY 태그에 클래스를 동적으로 추가하는 방법은 무엇입니까?


22

아래 예제와 같이 body 태그에 클래스를 동적으로 추가하는 방법은 무엇입니까?

- 홈
-Cities      
--Melbourne       <body class="melbourne">
--- 테마 파크       <body class="melbourne theme_parks">
--- 레스토랑       <body class="melbourne restaurants">
- 새로운 뉴욕       <body class="new_york">
--- 테마 파크       <body class="new_york theme_parks">
--- 레스토랑       <body class="new_york restaurants">
- 문의 소개       <body class="contact_us">

프로그래밍 배경이없는 Drupal 초보자. 따라서 솔루션을 공유 할 때 가능한 한 자세하게 설명해 주시면 감사하겠습니다.

답변:


37

Nikhil Mohan의 답변을 설명 template_preprocess_html()하기 위해 테마의 template.php 파일 안에 구현할 수 있습니다 . 여기에서 진행되는 작업의 기본 사항을 이해하려면 Themable Output 재정 의 문서를 읽으 십시오.

이 함수 내 에서 페이지 $vars['classes_array']의 HTML <body>태그에 적용될 클래스 목록을 보유하는 변수에 액세스 할 수 있습니다 .

불행히도 메뉴에서 현재 페이지의 위치에 대한 정보를 즉시 사용할 수는 없습니다. 당신이 사용할 수있는 menu_get_item()다음 menu_get_ancestors()이 정보를 얻을 수 있지만, 우리는 아마 simpiler 방식으로 얻을 수있는 무언가에 대한 처리 능력이 많이 있습니다.

pathauto 모듈을 사용하여 메뉴 경로를 기반으로 컨텐츠 페이지의 시맨틱 경로를 자동으로 작성한다고 가정하면 (예 : Melbourne Theme Parks 페이지에는 'melbourne / theme_parks'경로가 있음) 페이지의 경로를 사용하여 클래스를 작성할 수 있습니다 를 찾고 있습니다:

function THEMENAME_preprocess_html(&$vars) {
  $path = drupal_get_path_alias();
  $aliases = explode('/', $path);

  foreach($aliases as $alias) {
    $vars['classes_array'][] = drupal_clean_css_identifier($alias);
  } 
}

그게 다야. Drupal은 현재 페이지의 경로 별칭을보고 경로 별칭의 <body>각 청크에 대한 클래스를 태그에 추가합니다 .


1
경로가 작동하지 않으면 menu_get_active_breadcrumb 구문 분석 도 옵션입니다. static해당 시점 의 캐시에 있을 가능성이 크므로 오버 헤드가 거의 없습니다.
mpdonadio

3
설명뿐만 아니라 코드에 대해 특히 @sheena_d에게 감사합니다! 이 오메가 테마 작업과 작업에 그걸 얻기 위해 관리하는 방법에 검색 좀해야 할 일을했을 : D 이것은 오메가 테마에 작동하도록 라인은 다음과 같습니다 $vars['attributes_array']['class'][] = drupal_clean_css_identifier($alias);
kyooriouskoala



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