23

Drupal 6 の特定のノードに CSS または Javascript ファイルを含めるための最良の方法は何ですか?

小さな JavaScript アプリケーションが実行されているページを自分のサイトに作成したいので、CSS と JavaScript はそのページに固有であり、他のページの読み込みに含めたくありません。

4

6 に答える 6

14

そのために使用しないことをお勧めしhook_nodeapiます。CSS と Javascript の追加はレイアウトに関連しているためhook_nodeapi、その場所ではありません。テーマを使用してください。このようにして、新しいテーマを開発するときにこれらのファイルを上書きできます。nodeapi アプローチでそれを行うのは少し難しくなります (ファイルの js/css リストを検索し、それらを削除して、独自のものに置き換える必要があります)。

とにかく、あなたがする必要があるのは、それらのファイルを追加するノード前処理関数を追加することです。これは、モジュールまたはカスタム テーマで行うことができます。モジュールの場合、これは次のようになります。

function mymodule_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(drupal_get_path('module', 'mymodule') . "/file.js", "module");
    drupal_add_css(drupal_get_path('module', 'mymodule') . "/file.css", "module");
  }
}

またはテーマの場合:

function mytheme_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(path_to_theme() . "/file.js", "theme");
    drupal_add_css(path_to_theme(). "/file.css", "theme");
  }
}

最初にキャッシュをクリアすることを忘れないでください。

これらの関数は、ノードがテーマ化される前に呼び出されます。そこに js/css を指定すると、カスケード アプローチが可能になります。モジュールに汎用/基本的なものを配置し、テーマに拡張または特定の機能を提供できます。

于 2008-09-15T23:21:37.383 に答える
5

前処理関数を使用していますが、これにはいくつかの問題があります。$variables['styles']通常、ノードの前処理関数が呼び出される前に設定されます。つまりdrupal_get_css、すでに呼び出されているため、呼び出しがdrupal_add_css無駄になります。についても同様ですdrupal_add_js。値をリセットすることでこれを回避し$variables['styles']ます。

function mytheme_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(path_to_theme() . "/file.js", "theme");
    drupal_add_css(path_to_theme(). "/file.css", "theme");
    $variables['styles'] = drupal_get_css();
    $variables['script'] = drupal_get_js();
  }
}

これはほとんどの場合にうまくいくようです。

PS テーマの問題を解決するためにモジュールを作成する必要はほとんどありません。

乾杯。

于 2009-03-10T02:17:53.413 に答える
4

これは良い解決策のようです:

http://drupal.org/project/js_injector および http://drupal.org/project/css_injector

インラインコードを技術的にノード以外のものに挿入したい場合に機能するため、ノード ID も PHP 入力オプションも使用できません。いくつかの管理ページに小さな jQuery の微調整を挿入するために使用したように。ノード ID ではなくパスで機能します。

于 2010-06-10T11:40:04.860 に答える
3

私がこれまでに思いついた最善の解決策は、PHP 入力モードを有効にしてから、ノードの本体の先頭にある PHP ブロックでdrupal_add_cssdrupal_add_jsを適切に呼び出すことです。

于 2008-09-15T00:00:15.100 に答える
2

ノードが表示されたときに、 hook_nodeapiを使用して JS/CSS を挿入する簡単なモジュールです。

function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  // the node ID of the node you want to modify
  $node_to_modify = 6;

  // do it!
  if($op == 'view' && $node->nid == $node_to_modify) {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/mymodule.js');
    drupal_add_css(drupal_get_path('module', 'mymodule') . '/mymodule.css');
  }
}

これにより、PHP 入力フィルターを有効にする際のセキュリティの問題が回避され、メイン ノード テンプレートを更新してカスタム テンプレートを忘れた場合に古くなる可能性がある別のノード テンプレート ファイルは必要ありません。

于 2008-09-15T02:09:30.157 に答える
0

javascript を呼び出すそのノード (node-needsjs.tpl.php) のカスタム テンプレートを持つことができます。これは、ノード本体で PHP を直接使用するよりも少し簡潔であり、将来のコンテンツの変更が容易になります。

編集:上記はあまり明確ではなかったと思います。テンプレート ファイルに node-(nodeid).tpl.php という名前を付けます。ノード 1 の場合は、ファイル node-1.tpl.php を呼び出します。

于 2008-09-15T00:07:33.507 に答える