Je voudrais utiliser le script Selectivizr pour émuler les sélecteurs CSS3 dans IE6-8.
Mais j'ai du mal à l'ajouter à mon thème. Jusqu'ici essayé:
1) Forcer ceci dans la section de tête html.tpl.php:
<!--[if lt IE 9]>
<script src="<?php print base_path() . path_to_theme(); ?>/js/selectivizr.js"></script>
<![endif]-->
Mais base_path () ne semble rien retourner en D7 (au moins dans html.tpl.php - peut-être dans page.tpl.php ...). Et je sais que ce n'est pas la façon Drupal de le faire de toute façon.
2) Ajout au fichier .info de mon thème:
scripts[] = selectivizr.js
Mais alors c'est inconditionnel, bien sûr :(
3) Utilisation de drupal_add_js () dans mon template.php.
Mais encore une fois, je ne suis pas sûr que cela puisse être réglé conditionnellement là-bas?
Je pense que votre 1) est la meilleure option.
Vous n'avez pas besoin d'appeler de fonction, vous avez déjà ces valeurs:
<script type="text/javascript" src="<?php print $base_path . $directory; ?>/js/selectivizr.js"></script>
FYI, <?php dsm($variables) ?>
dans n'importe quel fichier modèle pour voir quelles variables sont disponibles. (avec le module de développement installé)
Il existe un module Feuilles de style conditionnelles qui a une solution élégante pour ajouter des conditions IE dans le fichier .info, mais toujours uniquement pour CSS. (Voir fonctionnalité demande pour JS)
Voici comment j'ai ajouté html5shiv dans mon fichier template.php:
$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');
Si votre fichier JS n'a pas de dépendances, il peut être inclus comme ceci dans la balise head de 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');
Si vous avez, disons, une dépendance jQuery, il est logique de mettre votre code en bas de la page:
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]-->',
)
);
}
Je pensais que c'était cuit mais c'était faux.
Il semble que le thème vaisseau-mère utilise cette librabry.
IL fait les choses un peu différemment de vous mais fait essentiellement votre option 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]-->';
Il semble que ce code ne fonctionnera pas si votre site n'est pas sous /
Mais si la bibliothèque est nécessaire pour votre thème, je ne vois aucun problème à mettre le code conditionnel dans le fichier page.tpl.php.
J'utiliserais drupal_add_html_head () dans votre template.php. Malheureusement, # 865536: drupal_add_js () n'a pas l'option 'navigateurs'