特定のコンテンツタイプが表示されているときにCSSとJSファイルを追加しようとしています(Drupal 6)。問題は、コードがすべてのページに追加されていることです。
私はこれを最初に試しました、template.phpに含まれています:
function phptemplate_preprocess_node(&$vars, $hook) {
$node = $vars['node'];
if ($node->type == 'mytype') {
drupal_add_css(path_to_theme() . "/css/mytpess.css");
drupal_add_js(path_to_theme() . "/javascripts/jquery.masonry.min.js");
drupal_add_js("$(document).ready(function(){
$('.node').masonry({
itemSelector: '.field-type-flexifield'
});
});",'inline');
}
}
次に、それを外に移動し、node-mytype.tpl.phpに配置しました。
drupal_add_css(path_to_theme() . "/css/mytpess.css");
drupal_add_js(path_to_theme() . "/javascripts/jquery.masonry.min.js");
drupal_add_js("$(document).ready(function(){
$('.node').masonry({
itemSelector: '.field-type-flexifield'
});
});",'inline');
しかし、どちらの方法でもすべてのページに追加されます。どうすればこれを解決できますか?
Phptemplate_preprocess_nodeにdrupal_add_cssまたは_jsを追加する場合、
ここで、以下のサンプルコードを参照してください
function phptemplate_preprocess_node(&$vars, $hook) { $node = $vars['node'];
if ($node->type == 'mytype') {
drupal_add_css(path_to_theme() . "/css/mytpess.css");
drupal_add_js(path_to_theme() . "/javascripts/jquery.masonry.min.js");
drupal_add_js("$(document).ready(function(){
$('.node').masonry({
itemSelector: '.field-type-flexifield'
});
});",'inline');
}
$css = drupal_add_css();
$scripts = drupal_add_js();
$vars['styles'] = drupal_get_css($css);
$vars['scripts'] = drupal_get_js('header', $scripts);
}
カスタムモジュールで http://api.drupal.org/api/drupal/developer!hooks!node.php/function/hook_view/6 hook_viewを使用してこれを行うことができます。
たとえば、モジュール名が「example」の場合、関数は
function example_view($node, FALSE, TRUE) {
if ($node->type == "mytype") {
drupal_add_css(path_to_theme() . "/css/mytpess.css");
drupal_add_js(path_to_theme() . "/javascripts/jquery.masonry.min.js");
}
}
template_preprocess_node()
は遅すぎませんか?代わりにtemplate_preprocess_page()
を使用してみてください。 $variables['node']->type
いつものように。
function template_preprocess_page(&$vars) {
if (isset($vars['node'], $vars['node']->type) && $vars['node']->type === 'mytype') {
//ADD_JS
//ADD_CSS
}
}
編集:補足として、template_preprocess_page
はTHEME_NAME_preprocess_page
またはMODULE_NAME_preprocess_page
に名前を変更する必要があります。その関数を配置する場所に応じて。