web-dev-qa-db-ja.com

条件付きJavaScriptをテーマに追加する方法

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) drupal_add_js() を私のtemplate.phpで使用します。

しかし、繰り返しになりますが、条件付きで設定できるかどうかはわかりませんか?

10
pushka

私はあなたの1)が最良の選択だと思います。

関数を呼び出す必要はありません。すでにこれらの値を持っています。

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

参考までに、テンプレートファイルで<?php dsm($variables) ?>を使用して、使用可能な変数を確認してください。 (develモジュールがインストールされている場合)

モジュールがあります 条件付きスタイルシート これは、.infoファイルにIE条件を追加するためのエレガントなソリューションがありますが、CSSに対してのみです。 featureリクエスト JSの場合)

3
corbacho

これは、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');
15
jpatiaga

JSファイルに依存関係がない場合は、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');

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

これは焼き込まれていると思ったが間違っていた。

mothership テーマがこのライブラリを使用しているようです。

それはあなたとは少し違うことをしますが、本質的にあなたのオプションを行います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ファイルに挿入しても問題は発生しません。

1
Jeremy French
1
Dylan Tack