it-swarm-vi.com

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

Tôi muốn sử dụng Selectivizr script để 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 mẫu.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?

10
pushka

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 Biểu định kiểu có điều kiện có một giải pháp tinh tế để thêm IE điều kiện trong tệp .info, nhưng vẫn chỉ dành cho CSS. (Xem tính năng yêu cầ cho JS)

3
corbacho

Đâ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');
15
jpatiaga

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

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

Có vẻ như chủ đề bà mẹ sử dụng sự lố lă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.

1
Jeremy French

Tôi sẽ sử dụng drupal_add_html_head () trong template.php của bạn. Thật không may, # 865536: drupal_add_js () bị thiếu tùy chọn 'trình duyệt'

1
Dylan Tack