Drupal 6 の特定のノードに CSS または Javascript ファイルを含めるための最良の方法は何ですか?
小さな JavaScript アプリケーションが実行されているページを自分のサイトに作成したいので、CSS と JavaScript はそのページに固有であり、他のページの読み込みに含めたくありません。
Drupal 6 の特定のノードに CSS または Javascript ファイルを含めるための最良の方法は何ですか?
小さな JavaScript アプリケーションが実行されているページを自分のサイトに作成したいので、CSS と JavaScript はそのページに固有であり、他のページの読み込みに含めたくありません。
そのために使用しないことをお勧めし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();
}
}
これはほとんどの場合にうまくいくようです。
PS テーマの問題を解決するためにモジュールを作成する必要はほとんどありません。
乾杯。
これは良い解決策のようです:
http://drupal.org/project/js_injector および http://drupal.org/project/css_injector
インラインコードを技術的にノード以外のものに挿入したい場合に機能するため、ノード ID も PHP 入力オプションも使用できません。いくつかの管理ページに小さな jQuery の微調整を挿入するために使用したように。ノード ID ではなくパスで機能します。
私がこれまでに思いついた最善の解決策は、PHP 入力モードを有効にしてから、ノードの本体の先頭にある PHP ブロックでdrupal_add_cssとdrupal_add_jsを適切に呼び出すことです。
ノードが表示されたときに、 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 入力フィルターを有効にする際のセキュリティの問題が回避され、メイン ノード テンプレートを更新してカスタム テンプレートを忘れた場合に古くなる可能性がある別のノード テンプレート ファイルは必要ありません。
javascript を呼び出すそのノード (node-needsjs.tpl.php) のカスタム テンプレートを持つことができます。これは、ノード本体で PHP を直接使用するよりも少し簡潔であり、将来のコンテンツの変更が容易になります。
編集:上記はあまり明確ではなかったと思います。テンプレート ファイルに node-(nodeid).tpl.php という名前を付けます。ノード 1 の場合は、ファイル node-1.tpl.php を呼び出します。