Drupal 6の特定のノードにCSSまたはJavascriptファイルを含める最良の方法は何ですか?Drupal 6の特定のノードにCSSまたはJavascriptファイルを含める
小さなJavaScriptアプリケーションを実行しているサイトにページを作成したいので、CSSとjavascriptは固有のものですそのページは、他のページの読み込みには全く含まれたくないでしょう。
Drupal 6の特定のノードにCSSまたはJavascriptファイルを含める最良の方法は何ですか?Drupal 6の特定のノードにCSSまたはJavascriptファイルを含める
小さなJavaScriptアプリケーションを実行しているサイトにページを作成したいので、CSSとjavascriptは固有のものですそのページは、他のページの読み込みには全く含まれたくないでしょう。
PHPの入力モードを有効にしてから、ノード本体の先頭にあるPHPブロックでdrupal_add_cssとdrupal_add_jsを適切に呼び出してください。
javascriptを呼び出すノード(node-needsjs.tpl.php)のカスタムテンプレートを作成できます。これは、ノード本体でPHPを使用するよりも少し洗練されており、将来的にコンテンツの変更を容易にします。
編集:私は上ではっきりとは思わなかった。テンプレートファイルにnode-(nodeid).tpl.phpという名前を付けたいとします。したがって、ノード1の場合、node-1.tpl.phpファイルを呼び出してください。
私は本当にこの答えをよく考えていたはずです - カスタムテンプレートファイルを使用することのさらなるメリットはtemplate.phpのtemplate_preprocess_page関数を介して他のノードにテンプレートを使用させることです。 – MattBelanger
これは、ノードを表示するときに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の入力フィルタを有効にすると、セキュリティ上の問題を回避し、あなたがメインのノードテンプレートを更新して、カスタム1を忘れてしまった場合に時代遅れになる可能性があり、別のノードテンプレートファイルを必要としません。
これには、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を指定すると、カスケード型のアプローチが可能になります。モジュールに汎用/基本的な機能を持たせ、テーマに拡張機能や特定の機能を提供することができます。
些細な修正:テーマにCSSを追加するときは、drupal_add_cssコールの後にstyles変数を更新する必要があります。 $ variables ['styles'] = drupal_get_css(); – Pianosaurus
私は前処理機能を使用しますが、これにはいくつかの問題があります。 $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();
}
}
これはほとんどの場合有効です。
P.S.テーマの問題を解決するためのモジュールを作成する必要はほとんどありません。
乾杯。
これは良い解決策のように思える:
http://drupal.org/project/js_injector と http://drupal.org/project/css_injector
あなたは何のノードIDと無PHPの入力オプションがありませんので、技術的にノード以外の何かにインラインコードを挿入したい場合には動作します利用可能です。私は小さなjQueryの調整をいくつかの管理ページに挿入するのと同じように使いました。これはノードIDではなくパスで動作します。
私はDrupal 5でこの技術を繰り返し使用しました。たとえば、このサイトのフロントページの「クラブカレンダー」はこのように実装されました。 http://www.chesmontastro.org/ –
これは最も簡単な解決策かもしれませんが、データベースにPHPコードを保存することは非常に難しいため、改訂管理はほとんど不可能です。上記のInferisのソリューションは、はるかにクリーンなアプローチです。 – jhedstrom