如何在主题中添加条件javascript?


10

我想使用Selectivizr脚本模拟IE6-8中的CSS3选择器。

但是我很难将其添加到主题中。到目前为止尝试:

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()

但是,我不确定是否可以在此处有条件地设置它?

Answers:


3

我认为您的1)是最佳选择。

您不需要调用任何函数,您已经拥有了这些值:

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

仅供参考,<?php dsm($variables) ?>在任何模板文件中查看可用的变量。(已安装开发模块)

有一个模块Conditional Stylesheets,它有一个优雅的解决方案,可以在.info文件中添加IE条件,但仍然仅适用于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]->'以获取符合标准的标记。
愤怒的丹

在@AngryDan的建议中进行了编辑。
wizonesolutions 2014年

1

我以为这是烤的,但是错了。

看来母权主题使用了这种诽谤。

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,则可以将硬编码的库路径更改为使用librarys_get_path();如果不使用,则可以将其更改为drupal_get_path()。
masterchief


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.