Drupal 6のに外部スクリプトをロードする
-
01-10-2019 - |
質問
外部スクリプトをロードしたい <head>
. 。モジュール固有のため、モジュールに負荷の世話をしたいと思います。
Drupal 6、機能 drupal_add_js()
外部スクリプトを追加することはできません <head>
. 。で利用可能になります Drupal 7 渡ります "external"
関数への議論。 D6では、使用できます drupal_set_html_head()
代わりに、しかし、それは与えられたデータを挿入します <head>
私が望んでいない。 データを追加したいと思います.
それは明らかになった drupal_html_set_head()
データを追加します。
$stored_head .= $data ."\n";
だから私が実験した動作 - dataは頭のデータの先頭に挿入された - 私が電話することから来るはずです drupal_html_set_head()
私のモジュールで hook_init()
働き。
どうすればデータを非常に <head>
?
解決
デフォルト page.tpl.php (で見つけることができます /modules/system/page.tpl.php これは:
<head>
<title><?php print $head_title; ?></title>
<?php print $head; ?>
<?php print $styles; ?>
<?php print $scripts; ?>
<script type="text/javascript"><?php /* Needed to avoid Flash of Unstyled Content in IE */ ?> </script>
</head>
あなたが作るとき drupal_set_html_head()
変数に追加のものです $head
, 、しかし、あなたが見るように、より多くの変数が追加されています。
考えられる解決策の1つは、あなたがしたいものを追加することです $scripts
, 、 それ以外の $head
.
どのように?
モジュールからのプリプロセス関数を使用してください。
function MYMODULE_preprocess_page(&$variables) {
$variables['scripts'] .= $your_stuff;
}
私はこの解決策を試しませんでしたが、うまくいかない場合は、実行の順序だからです。モジュールの重量を高く設定してください。そうすれば実行します 後 system_preprocess_page
.
機能しない他の理由は、テーマが異なる順序で変数を印刷することであるためです page.tpl.php. 。ただし、モジュールのコードからこれを制御することはできません。
他のヒント
問題を回避するための複数のソリューションがあります。
- hook_footer()を使用してJSをフッターに追加します
- を作成する小さなjQueryスクリプトを作成します
<script>
要素とそれを追加します<head>
- テンプレート前処理関数でそれを行います
- 独自のpage.tpl.phpを作成します
Drupalはを使用します .=
を作成するオペレーター $head
変数。 $js
と $css
配列に保持され、再注文することができます。$head
文字列であり、再注文することはできません。定期的な発現爆発、再注文、崩壊など。
$heads = preg_explode("\n", $head);
ksort($heads);
$head = implode("\n", $heads);
テーマの可変プリプロセッサで。
これを見ましたか コメント?
これを使用してD6で外部JSファイルコールを設定する場合は注意してください。
drupal_set_html_head( '');
完全なスクリプトのクロージングタグ(つまり)を含めないと、Firefox(そしておそらく他のブラウザ、WebKitベースのブラウザーが問題ないように見えます)で壊れます。タグは閉じることができず、次の利用可能なタグまで他のヘッダーを一掃します。これにより、通常、すべてのCSSファイルがロードに失敗し、次に完全にタグ付きのJSファイルがロードされません。代わりにこのフォームを使用してください。
drupal_set_html_head( '');
これは、Drupal 6.16に適用されます。 drupal_add_jsの新しい外部オプションを使用して、D7で克服できます。