Wie füge ich dem Thema bedingtes Javascript hinzu?

10

Ich möchte das Selectivizr- Skript verwenden, um CSS3-Selektoren in IE6-8 zu emulieren.

Aber es fällt mir schwer, es meinem Thema hinzuzufügen. Bisher versucht:

1) Erzwingen Sie dies in den Kopfabschnitt html.tpl.php:

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

Aber base_path () scheint in D7 nichts zurückzugeben (zumindest in html.tpl.php - vielleicht in page.tpl.php ...). Und ich weiß, dass dies sowieso nicht die Drupal-Methode ist.

2) Hinzufügen zur .info-Datei meines Themas:

scripts[] = selectivizr.js

Aber dann ist es natürlich bedingungslos :(

3) Verwenden von drupal_add_js () in meiner template.php.

Aber auch hier bin ich mir nicht sicher, ob es dort bedingt eingestellt werden kann?

Puschka
quelle

Antworten:

3

Ich denke dein 1) ist die beste Option.

Sie müssen keine Funktion aufrufen, Sie haben bereits folgende Werte:

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

Zu Ihrer Information, <?php dsm($variables) ?>in jeder Vorlagendatei, um zu sehen, welche Variablen verfügbar sind. (mit installiertem Entwicklungsmodul)

Es gibt ein Modul für bedingte Stylesheets , das eine elegante Lösung zum Hinzufügen von IE-Bedingungen zur .info-Datei bietet, jedoch immer noch nur für CSS. (siehe Funktionsanforderung für JS)

corbacho
quelle
15

So habe ich html5shiv in meine template.php-Datei eingefügt:

$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');
jpatiaga
quelle
4
Einige Änderungen: Fügen Sie '#value' hinzu und setzen Sie es auf ''. Ändern Sie dann '#suffix' in '<! [Endif] ->', um ein standardkonformes Markup zu erhalten.
Angry Dan
Bearbeitet in @ AngryDans Vorschlag.
Zauberlösungen
1

Ich dachte, das wäre eingebrannt, aber falsch.

Es sieht so aus, als ob das Mutterschiff- Thema dieses Librabry verwendet.

Die IT macht die Dinge ein wenig anders als Sie, aber im Wesentlichen Ihre 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]-->';

Dieser Code funktioniert anscheinend nicht, wenn sich Ihre Site nicht unter / befindet

Wenn die Bibliothek jedoch für Ihr Thema benötigt wird, sehe ich kein Problem beim Einfügen des bedingten Codes in die Datei page.tpl.php.

Jeremy French
quelle
Sie können den fest codierten Bibliothekspfad so ändern, dass Bibliotheken_get_path () verwendet wird, wenn Sie die Bibliotheks-API verwenden, oder drupal_get_path (), wenn Sie dies nicht tun.
Masterchief
0

Wenn Ihre JS-Datei keine Abhängigkeiten aufweist, kann sie wie folgt in das Head-Tag von HTML aufgenommen werden:

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

Wenn Sie beispielsweise eine jQuery-Abhängigkeit haben, ist es sinnvoll, den Code am Ende der Seite zu platzieren:

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]-->',
    )     
  );
}
Sergey Semashko
quelle
In Ihrem ersten Codeblock befindet sich ein zusätzliches Skript-Tag im Schlüssel #suffix.
Pol Dellaiera