Drupal 6 の特定のノードの CSS または Javascript ファイルを含める
-
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 を呼び出します。