Drupal 6 の特定のノードの CSS または Javascript ファイルを含める

StackOverflow https://stackoverflow.com/questions/61735

  •  09-06-2019
  •  | 
  •  

質問

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

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

役に立ちましたか?

解決 4

私がこれまでに思いついた最良の解決策は、PHP 入力モードを有効にしてから、 drupal_add_css そして drupal_add_js 必要に応じて、ノードの本体の先頭にある PHP ブロックに追加します。

他のヒント

使用しないことをお勧めします 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 を指定すると、カスケード アプローチが可能になります。モジュール内に汎用/基本的なものを含めて、テーマ内で拡張機能または特定の機能を提供できます。

前処理関数を使用していますが、これにはいくつかの問題があります。 $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();
  }
}

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

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

乾杯。

これは良い解決策のように思えます:

http://drupal.org/project/js_injectorそしてhttp://drupal.org/project/css_injector

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

これはうまくいくはずです - を使用するクイックモジュールです。 フック_ノードAPI ノードの表示時に 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 入力フィルターの有効化に伴うセキュリティの問題が回避され、メイン ノード テンプレートを更新してカスタム テンプレートを忘れた場合に古くなってしまう可能性がある別のノード テンプレート ファイルが必要なくなります。

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

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

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