2

に外部スクリプトをロードしたい<head>。これはモジュール固有なので、モジュールにロードを処理してもらいたいです。

Drupal 6では、関数drupal_add_js()はに外部スクリプトを追加することを許可していません<head>Drupal 7で利用可能になり"external"、関数に引数を渡します。D6drupal_set_html_head()では、代わりに使用できますが、指定されたデータを不要なデータの先頭に挿入し<head>ます。その中にデータを追加したいのですが

drupal_html_set_head()データを追加することが判明しました。

$stored_head .= $data ."\n";

drupal_html_set_head()したがって、私が実験した動作(データはヘッドデータの先頭に挿入されました)は、モジュールのhook_init()関数で呼び出す動作に由来するはずです。

とのデータを追加するにはどうすればよい<head>ですか?

4

4 に答える 4

3

問題を回避するための複数の解決策があります。

  • hook_footer()を使用してjsをフッターに追加します
  • <script>要素を作成してに追加する小さなjqueryスクリプトを作成します<head>
  • テンプレート前処理機能でそれを行う
  • 独自のpage.tpl.phpを作成する
于 2010-09-08T14:13:06.840 に答える
3

デフォルトの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に何かを追加していますが、それでもあなたが見るように追加されたより多くの変数があります。

$scripts考えられる解決策の1つは、の代わりに、必要なものを追加することです$head

どのように?

モジュールの前処理機能を使用します。

function MYMODULE_preprocess_page(&$variables) {
    $variables['scripts'] .= $your_stuff;
}

私はこの解決策を試しませんでしたが、うまくいかない場合は、実行の順序が原因である可能性があります。モジュールの重みを高く設定してみてください。そうすれば、モジュールは。のsystem_preprocess_pageに実行されます。

動作しない可能性がある他の理由は、テーマがpage.tpl.phpで異なる順序で変数を出力しているためです。ただし、モジュールのコードからこれを制御することはできません。

于 2010-09-13T11:00:51.320 に答える
2

Drupalは.=演算子を使用して$head変数を作成します。およびは配列$js$css保持され、並べ替えることができます。 $headは文字列であり、並べ替えることはできません。それ以外の場合は、醜い、エラーが発生しやすいハッキングによって並べ替えることができます。正規表現の爆発、並べ替え、爆縮など。

$heads = preg_explode("\n", $head);
ksort($heads);
$head = implode("\n", $heads);

テーマの可変プリプロセッサで。

于 2010-09-10T07:31:02.677 に答える
2

このコメントを見ましたか?

これを使用してD6で外部jsファイル呼び出しを設定する場合は注意してください。例:

drupal_set_html_head('');

完全なスクリプト終了タグ(つまり)を含めないと、Firefoxで機能しなくなります(他のブラウザー、Webkitベースのブラウザーでも問題ないようです)。タグは閉じることができず、次に使用可能なタグまで他のヘッダーをすべて消去します。これにより、通常、すべてのcssファイルと、次の完全にタグ付けされたjsファイルの読み込みに失敗します。したがって、代わりに次のフォームを使用してください。

drupal_set_html_head('');

これは、Drupal6.16までに適用されます。drupal_add_jsの新しい外部オプションを使用して、D7でこれを克服できます。

于 2010-09-08T14:38:58.250 に答える