테마에 조건부 자바 스크립트를 추가하는 방법은 무엇입니까?


10

IE6-8에서 CSS3 선택자를 에뮬레이트 하기 위해 Selectivizr 스크립트 를 사용하고 싶습니다 .

하지만 테마에 추가하는 데 어려움을 겪고 있습니다. 지금까지 시도한 결과 :

1) 이것을 html.tpl.php 헤드 섹션으로 강제 :

<!--[if lt IE 9]>
<script src="<?php print base_path() . path_to_theme(); ?>/js/selectivizr.js"></script>
<![endif]-->

그러나 base_path ()는 D7에서 아무것도 반환하지 않는 것 같습니다 (적어도 html.tpl.php-아마도 page.tpl.php ...). 그리고 저는 이것이 Drupal 방식 이 아니라는 것을 알고 있습니다.

2) 테마의 .info 파일에 추가 :

scripts[] = selectivizr.js

그러나 그것은 물론 무조건적입니다.

3) 내 template.php에서 drupal_add_js ( ) 사용 .

그러나 다시 조건부로 설정할 수 있는지 확실하지 않습니까?

답변:


3

나는 당신의 1) 최선의 선택이라고 생각합니다.

어떤 함수도 호출 할 필요가 없습니다. 이미 그 값을 가지고 있습니다 :

<script type="text/javascript" src="<?php print $base_path . $directory; ?>/js/selectivizr.js"></script>

참고 <?php dsm($variables) ?>로 어떤 템플릿 파일에서 어떤 변수를 사용할 수 있는지 확인하십시오. (디벨 모듈이 설치된 상태)

.info 파일에 IE 조건을 추가 할 수있는 우아한 솔루션을 제공하는 CSS ( Conditional Stylesheet) 모듈 이 있지만 여전히 CSS 전용입니다. ( JS에 대한 기능 요청 참조 )


15

이것은 template.php 파일에 html5shiv를 추가 한 방법입니다.

$html5shiv = array(
  '#tag' => 'script',
  '#attributes' => array( // Set up an array of attributes inside the tag
    'src' => drupal_get_path('theme', 'mythemename') . '/js/lib/html5shiv.js', 
  ),
  '#prefix' => '<!--[if lte IE 8]>',
  '#suffix' => '</script><![endif]-->',
);
drupal_add_html_head($html5shiv, 'html5shiv');

4
몇 가지 변경 사항 : '#value'를 추가하고 ''로 설정 한 다음 '#suffix'를 '<! [endif]->'로 변경하여 표준을 준수하는 마크 업을 얻으십시오.
Angry Dan

@AngryDan의 제안에서 편집했습니다.
wizonesolutions

1

나는 이것이 구운 것이라고 생각했지만 잘못되었습니다.

등이 보이는 모선의 주제는이 librabry를 사용합니다.

IT는 당신과 조금 다르게 일을하지만 본질적으로 당신의 선택을 수행 1

  $vars['selectivizr'] = '<!--[if (gte IE 6)&(lte IE 8)]>';
  $vars['selectivizr'] .= '<script type="text/javascript" src="/sites/all/libraries/selectivizr/selectivizr.js"></script>';
  $vars['selectivizr'] .= '<![endif]-->';

사이트가 / 아래에 있지 않으면이 코드가 작동하지 않는 것 같습니다.

그러나 테마에 라이브러리가 필요한 경우 조건부 코드를 page.tpl.php 파일에 넣는 데 문제가 없습니다.


라이브러리 api를 사용하는 경우 library_get_path ()를 사용하도록 하드 코딩 된 라이브러리 경로를 변경하거나 사용하지 않는 경우 drupal_get_path ()를 변경할 수 있습니다.
걸프


1

JS 파일에 종속성이없는 경우 HTML의 head 태그에 다음과 같이 포함될 수 있습니다.

$selectivizr = array(
  '#tag' => 'script',
  '#attributes' => array(
    'src' => file_create_url(drupal_get_path('theme', 'theme_name') . '/js/lib/selectivizr.js'),
  ),
  '#prefix' => '<!--[if lte IE 9]>',
  '#suffix' => '</script><![endif]-->'
);
drupal_add_html_head($selectivizr, 'selectivizr');

jQuery 의존성을 가지고 있다면 코드를 페이지의 맨 아래에 두는 것이 합리적입니다.

function THEMENAME_preprocess_html(&$vars){
  $vars['page']['page_bottom']['jquery_dependent_js'] = array(
    'footer' => array(
      '#type' => 'markup',
      '#markup' => '<!--[if lte IE 9]><script src="' .
        file_create_url(drupal_get_path('theme', 'theme_name') . '/js/lib/jquery_dependent_js.js'). '"></script><![endif]-->',
    )     
  );
}

첫 번째 코드 블록에는 #suffix 키에 추가 스크립트 태그가 있습니다.
Pol Dellaiera
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.