아래 예제와 같이 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 초보자. 따라서 솔루션을 공유 할 때 가능한 한 자세하게 설명해 주시면 감사하겠습니다.
답변
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>
각 청크에 대한 클래스를 태그에 추가합니다 .
답변
template_preprocess_html
html.tpl.php에 대한 전처리 변수를 사용할 수 있습니다
html.tpl.php 참조
단일 Drupal 페이지의 기본 HTML 구조를 표시하는 기본 테마 구현