スクリプトを特定のノードIDまたはビューにアタッチする


7

Drupal 7では、次のコードを使用して、スクリプトを特定のコンテンツタイプに添付できます。

function THEMENAME_preprocess_node(&$variables) {
  if ($variables['type'] == 'INSERT_CONTENT_TYPE') {

        // include javascript
        drupal_add_js(path_to_theme() . 'INSERT_SCRIPT');

      }

    }

スクリプトを特定のノードIDまたは特定のビューにアタッチするには、どのコードを使用する必要がありますか?

variables['type']さまざまなアイテムと交換してみましたが、どれも動作しないようです。


2
このコードはどこに追加しますか?前処理機能はありますか?
Shoaib Nawaz、2011年

こんにちは私はそれをより明確にするために私の答えを更新しました
big_smile

回答:


14

ノードID:

function THEMENAME_preprocess_node(&$variables) {
  if ($variables['nid'] == 'INSERT_NODE_ID') {
    // include javascript
    drupal_add_js(path_to_theme() . 'INSERT_SCRIPT');
  }
}

見る:

function THEMENAME_preprocess_views_view(&$variables){
  if ($variables['name'] == 'INSERT_VIEW_MACHINE_NAME') {
    // include javascript
    drupal_add_js(path_to_theme() . 'INSERT_SCRIPT');
  }
}

ありがとう!これは最もクリーンなソリューションであり、ノードとビューの両方で機能するため、賞金を獲得できます。
big_smile 2011年

「INSERT_SCRIPT」の前に「/」が必要だと思います。(例えば/scripts/custom.js)
クリス・ハッピー


0

これを試して:

function THEMENAME_preprocess_node($node) {
    if ($node->nid == INSERT_NODE_ID) {
        // include javascript
        drupal_add_js(path_to_theme() . 'INSERT_SCRIPT');
    }
}

0

私があなたの質問をよく理解している場合は、ビューまたはノードまたはビューのエイリアスに基づいてスクリプトを表示してみませんか?(ノードIDを使用することもできます)

これらの関数を_preprocess_node(ノード)で、また_preprocess_page(ビューとノードの)でテスト6しました7

これは、次のIDを持つノード用です_preprocess_node

function seven_preprocess_node(&$vars) {
    if(isset($_GET['q'])){
        $nodeID = '9';
          if(arg(1) == $nodeID){
              drupal_add_js(path_to_theme() . '/test.js');
          } 
      }
} 

これは、次のエイリアスを持つノード用です_preprocess_node

function THEMENAME_preprocess_node(&$variables) {
    if(isset($_GET['q'])){
          $path = drupal_get_path_alias($_GET['q']);
          if(preg_match('#test_page#', $path)){
              drupal_add_js(path_to_theme() . '/test.js');
          } 
      }
}

この関数は_preprocess_page、ノードやビュー(エイリアス)に役立ちます。

function THEMENAME_preprocess_page(&$variables) {
    if(isset($_GET['q'])){
          $path = drupal_get_path_alias($_GET['q']);
          if(preg_match('#test_page#', $path)){
              drupal_add_js(path_to_theme() . '/test.js');
          } 
      }
}

この最後の関数は、ビュー/ノードまたはノードIDのエイリアスを検索する関数の例を示すだけです。

function THEMENAME_preprocess_page(&$variables) {
    if(isset($_GET['q'])){
        $script = '/test.js';//script name
        $currentPath = drupal_get_path_alias($_GET['q']);//current alias
        $targetPath = '#test_view#';//alias to match (delimiter is #), is for example of your view's page.
        $targetNodeID = '9';//node ID to match
          if(arg(1) == $targetNodeID || preg_match($targetPath, $currentPath)){
              drupal_add_js(path_to_theme() . $script);
          }
     }
}

情報がお役に立てば幸いです。


0

何もうまくいかなかったので、「preprocess」フックでチェックしました。

function MYMODULE-or-THEME_preprocess(){
    if(isset($_GET['q'])){
    $nodeID = '232'; //NODE ID TO CHECK
          if(arg(1) == $nodeID){              
     drupal_add_js(drupal_get_path('module', 'MYMODULE').'/js/myscript.js');
         } 
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.