web-dev-qa-db-ja.com

条件付きのdrupal_add_cssおよび_jsがすべてのページにコードを追加している

特定のコンテンツタイプが表示されているときに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');

しかし、どちらの方法でもすべてのページに追加されます。どうすればこれを解決できますか?

3

Phptemplate_preprocess_nodeにdrupal_add_cssまたは_jsを追加する場合、

  1. 最初に1つの変数で追加されたすべてのcssをフェッチし、これを$ styles値に割り当てます
  2. あなたがjsのために行う必要があるCSSと同じように。

ここで、以下のサンプルコードを参照してください

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);
}
3
Ramesh Babu T B

カスタムモジュールで 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");
  }
}
2
Anil Sagar

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_pageTHEME_NAME_preprocess_pageまたはMODULE_NAME_preprocess_pageに名前を変更する必要があります。その関数を配置する場所に応じて。

1
hampusn