JavaScriptを特定のコンテンツタイプに追加する


9

JavaScriptファイルをコンテンツタイプに基づいて特定のページに追加するための最良の方法は何ですか?たとえば、私はこれを追加したいと思います:

<script type='text/javascript' src='http://maps.google.com/maps/api/js?sensor=false'></script>

これまでのところ、この方法を使用して特定のコンテンツタイプに追加しています。map_pageコンテンツタイプの場合、ページに以下の2行のコードを追加します--map_page.tpl.php。

drupal_add_js("http://maps.google.com/maps/api/js?sensor=false", 'external');
$scripts = drupal_get_js();

他にもっと良い方法はありますか?可能であれば、いくつかの例を挙げることができますが、現在はよくわかりません...

回答:


6

適切なDrupal 7の同等物についてコメントすることはできませんが、Drupal 6のサイトでは、これをtemplate_preprocess_pageで行います。

(パネルに基づいて、arg()またはpage_manager_get_current_page()パネルから)決定を行うためのロジックをいくつか用意$vars["scripts"]し、外部スクリプトを付加します。ローカルスクリプトで依存関係の問題が発生しないように、先頭に追加します。

また、$global_scriptsGoogle APIやSWFObjectなど、CDNからロードしたいという考えのために呼び出される新しい領域を設定することもあり$scriptsます。これは、ページテンプレートの前に印刷されます。

正直なところ、私は通常、すべてのページにすべてのJSがあるので、ファイルがキャッシュされます。


6

Drupalでは再定義できないtemplate_preprocess_nodeため(node.moduleで既に定義されているため)、カスタムモジュールにプリプロセッサ関数を追加しました。

function mymodule_preprocess_node(&$vars) {
  if ($vars['type'] == 'my-node-type') {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/myjs.js');
  }
}

ノードタイプを取得する方が簡単なためでpreprocess_nodeはなく、使用しましたpreprocess_page。実際にjavascriptファイルを参照すると、自動的にキャッシュされます(パラメーターのセクションを参照)。


2

また、コンテンツタイプのhook_node_viewチェックを使用して、すでに行っている方法でjsを追加することもできます。

または

JSを使用する情報を出力するフィールドがある場合、そこにプリプロセッサーを使用してjsを追加します。したがって、jsインクルードは、コンテンツタイプではなくマップを表示するフィールドに依存します。


0

簡単な解決策は、add_jsを配置するだけです。

  drupal_add_js('drupal_get_path('module', 'mymodule') . '/myjs.js');

page / node template.php。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.