Hängen Sie ein Skript an eine bestimmte Knoten-ID oder Ansicht an

7

In Drupal 7 können Sie den folgenden Code verwenden, um ein Skript an einen bestimmten Inhaltstyp anzuhängen:

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

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

      }

    }

Welchen Code müssen Sie verwenden, um ein Skript an eine bestimmte Knoten-ID oder eine bestimmte Ansicht anzuhängen?

Ich habe versucht, variables['type']mit verschiedenen Gegenständen zu tauschen , aber keiner scheint zu funktionieren.

big_smile
quelle
2
Wo fügen Sie diesen Code hinzu? Eine Vorverarbeitungsfunktion?
Shoaib Nawaz
Hallo, ich habe meine Antwort aktualisiert, um es klarer zu machen
big_smile

Antworten:

14

Knoten-ID:

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

Aussicht:

function THEMENAME_preprocess_views_view(&$variables){
  if ($variables['name'] == 'INSERT_VIEW_MACHINE_NAME') {
    // include javascript
    drupal_add_js(path_to_theme() . 'INSERT_SCRIPT');
  }
}
rocketeerbkw
quelle
Vielen Dank! Dies bringt die Prämie, da es die sauberste Lösung ist und sowohl für den Knoten als auch für die Ansicht funktioniert.
big_smile
Ich bin mir ziemlich sicher, dass Sie vor "INSERT_SCRIPT" ein "/" benötigen. (zB /scripts/custom.js)
Chris Happy
1

Wenn Sie D6 verwenden. Versuchen Sie, mit JS Injector benutzerdefiniertes Javascript in eine Seite oder Ansicht einzufügen.

Aerozeppelin
quelle
Hallo, ich benutze Drupal 7 und möchte es ohne ein zusätzliches Modul machen.
big_smile
0

Versuche dies:

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

Wenn ich Ihre Frage gut verstehe, warum nicht Ihr Skript anzeigen, das den Alias ​​Ihrer Ansicht oder Ihres Knotens oder Ihrer Ansicht enthält? (ist auch mit der Node ID möglich)

Ich habe diese Funktionen mit _preprocess_node(Knoten) und auch mit _preprocess_page(für Ansichten und Knoten) in Drupal 6und getestet 7.

Dies ist für Knoten mit ID mit _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');
          } 
      }
} 

Dies gilt für Knoten mit Alias ​​mit _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');
          } 
      }
}

und diese Funktion mit _preprocess_pageist nützlich für Knoten und / oder Ansichten (Alias):

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');
          } 
      }
}

Diese letzte Funktion dient nur als Beispiel für eine Funktion, die nach einem Alias ​​für Ihre Ansicht / Ihren Knoten oder Ihre Knoten-ID sucht:

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);
          }
     }
}

Ich hoffe, dass Informationen nützlich sind.

cigotete
quelle
0

Bei mir hat nichts funktioniert, also habe ich mit 'Preprocess'-Hook nachgesehen, das funktioniert wie folgt: -

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');
         } 
    }
}
Jaz India
quelle