Temaya koşullu javascript nasıl eklenir?


10

IE6-8'de CSS3 seçicilerini taklit etmek için Selectivizr betiğini kullanmak istiyorum .

Ama bunu temama eklemekte zorlanıyorum. Şimdiye kadar denedim:

1) Bunu html.tpl.php kafa bölümüne zorlamak:

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

Ancak base_path (), D7'de bir şey döndürmüyor gibi görünüyor (en azından html.tpl.php'de - belki page.tpl.php ... 'de). Ve biliyorum ki bu zaten bunu yapmanın Drupal yolu değil .

2) Temamın .info dosyasına ekleme:

scripts[] = selectivizr.js

Ama sonra koşulsuz, elbette :(

3) template.php dosyamda drupal_add_js () kullanılması.

Ama yine de, orada şartlı olarak ayarlanabileceğinden emin değilim?

Yanıtlar:


3

Bence senin 1) en iyi seçenektir.

Herhangi bir işlevi çağırmanıza gerek yoktur, zaten bu değerlere sahipsiniz:

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

FYI, <?php dsm($variables) ?>herhangi bir şablon dosyasında hangi değişkenlerin mevcut olduğunu görmek için. (devel modülü takılıyken)

.İnfo dosyasına IE koşulları eklemek için zarif bir çözümü olan, ancak yine de yalnızca CSS için bir modül Koşullu Stil Sayfaları vardır. ( JS için özellik isteğine bakın )


15

Template.php dosyama html5shiv ekledim:

$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
Birkaç değişiklik: '#value' değerini ekleyin ve '' olarak ayarlayın, sonra standartlara uyumlu işaretleme elde etmek için '#suffix'i' <! [Endif] -> 'olacak şekilde değiştirin.
Angry Dan

@ AngryDan'ın önerisinde düzenlendi.
wizonesolutions

1

Bu pişmiş ama yanlış olduğunu düşündüm.

Ana tema bu kütüphaneyi kullanıyor gibi görünüyor .

BT sizden biraz farklı şeyler yapar ama aslında seçeneğinizi yapar 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]-->';

Siteniz / altında değilse bu kod çalışmaz gibi görünüyor

Ancak, temanız için kütüphane gerekiyorsa, koşullu kodu page.tpl.php dosyasına koymakla ilgili bir sorun görmüyorum.


Sabit kodlanmış kitaplıklar yolunu, libraries_get_path () öğesini kullanmak için api kitaplıklarını veya kullanmadıysanız drupal_get_path () yöntemini değiştirebilirsiniz.
masterchief


1

JS dosyanızın bağımlılığı yoksa, HTML'nin baş etiketine şu şekilde dahil edilebilir:

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

Diyelim ki, jQuery bağımlılığınız varsa, kodunuzu sayfanın altına koymak mantıklıdır:

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

İlk kod bloğunuzda, #suffix anahtarında fazladan bir komut dosyası etiketi bulunur.
Pol Dellaiera
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.