Làm thế nào để thêm javascript có điều kiện vào chủ đề?


10

Tôi muốn sử dụng tập lệnh Selectivizr để mô phỏng các bộ chọn CSS3 trong IE6-8.

Nhưng tôi đang gặp khó khăn khi thêm nó vào chủ đề của mình. Cho đến nay đã cố gắng:

1) Buộc phần này vào phần đầu html.tpl.php:

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

Nhưng base_path () dường như không trả về bất cứ thứ gì trong D7 (ít nhất là trong html.tpl.php - có thể trong page.tpl.php ...). Và tôi biết đây không phải là cách Drupal để làm điều đó.

2) Thêm vào tệp .info của chủ đề của tôi:

scripts[] = selectivizr.js

Nhưng dĩ nhiên, đó là vô điều kiện :(

3) Sử dụng drupal_add_js () trong template.php của tôi.

Nhưng một lần nữa, tôi không chắc rằng nó có thể được đặt ở điều kiện không?

Câu trả lời:


3

Tôi nghĩ rằng 1) của bạn là lựa chọn tốt nhất.

Bạn không cần gọi bất kỳ hàm nào, bạn đã có các giá trị đó:

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

FYI, <?php dsm($variables) ?>trong bất kỳ tệp mẫu nào để xem biến nào có sẵn. (với mô-đun phát được cài đặt)

Có một mô-đun Kiểuđiều kiện có một giải pháp tinh tế để thêm các điều kiện IE trong tệp .info, nhưng vẫn chỉ dành cho CSS. (xem yêu cầu tính năng cho JS)


15

Đây là cách tôi đã thêm html5shiv trong tệp template.php của mình:

$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
Một vài thay đổi: thêm '#value' và đặt thành '' sau đó thay đổi '#suffix' thành '<! [Endif] ->' để có được đánh dấu tuân thủ tiêu chuẩn.
Angry Dan

Đã chỉnh sửa trong đề xuất của @ AngryDan.
wizonesolutions

1

Tôi nghĩ rằng điều này đã được nướng trong nhưng đã sai.

Có vẻ như chủ đề làm mẹ sử dụng sự phỉ báng này.

CNTT làm mọi thứ hơi khác với bạn nhưng về cơ bản là tùy chọn 1 của bạn

  $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]-->';

Có vẻ như mã này sẽ không hoạt động nếu trang web của bạn không ở dưới /

Nhưng nếu thư viện là cần thiết cho chủ đề của bạn, tôi sẽ không gặp vấn đề gì với việc đưa mã điều kiện vào tệp page.tpl.php.


Bạn có thể thay đổi đường dẫn thư viện được mã hóa cứng để sử dụng library_get_path () nếu bạn đang sử dụng thư viện api hoặc drupal_get_path () nếu bạn không.
mưu


0

Nếu tệp JS của bạn không có phụ thuộc, nó có thể được bao gồm giống như thế này trong thẻ đầu của HTML:

$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');

Nếu bạn có, giả sử, phụ thuộc jQuery, sẽ rất hợp lý khi đặt mã của bạn xuống cuối trang:

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]-->',
    )     
  );
}

Có một thẻ script bổ sung trong khối mã đầu tiên của bạn, trong khóa #suffix.
Pol Dellaiera
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.