質問

外部スクリプトをロードしたい <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で克服できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top