it-swarm.com.de

Wie füge ich JavaScript für eine Ansicht hinzu?

Ich habe eine Ansicht auf meiner Site, die einen bestimmten Klassennamen hat. Ich möchte in der Datei template.php eines Themas wissen, wie ich feststellen kann, ob auf der angeforderten Seite eine Ansicht mit einem bestimmten Klassennamen verfügbar ist.

Dies ist für mich sehr wichtig, da ich bestimmtes JavaScript und CSS einschließen muss, wenn eine Ansicht mit einem bestimmten Klassennamen (z. B. Bildergalerie) auf einer Seite verwendet wird.

29
Mehrdad201

Sie können den Hook template_preprocess_views_view() verwenden, um dies zu tun:

function THEME_preprocess_views_view(&$vars) {
  $view = &$vars['view'];
  // Make sure it's the correct view
  if ($view->name == 'your-view-name') {
    // add needed javascript
    drupal_add_js(drupal_get_path('theme', 'your-theme') . '/your-js.js');
    // add needed stylesheet
    drupal_add_css(drupal_get_path('theme', 'your-theme') . '/your-css.css');
  }
}

Beachten Sie, dass Sie die spezifische Anzeige der Ansicht auch überprüfen können, indem Sie:

if ($view->name == 'your-view-name' && $view->current_display == 'your-display-id') {
  // include javascript & css here
}

Sie sollten in der Lage sein, nach einer benutzerdefinierten CSS-Klasse wie dieser zu suchen:

if ($view->name == 'your-view-name' && $view->display[$view->current_display]->display_options['css_class'] == 'your-css-class') {
   // include javascript & css here
}
42
Cyclonecode

Mit der Funktion views_get_page_view können Sie herausfinden, welche Ansicht auf der Seite bereitgestellt wird. Es gibt ein Ansichtsobjekt zurück. Beachten Sie, dass Sie im folgenden Codefragment mit dem maschinenlesbaren Namen von Ansichten vergleichen sollten. Natürlich können Sie auch einen eigenen Vergleich schreiben, der auf dem von views_get_page_view zurückgegebenen Ansichtsobjekt basiert

function YOURTHEMENAME_preprocess_page(&$variables) {
    $view = views_get_page_view();
    if($view->name == 'YOURVIEW') {
    //Do what ever you want 
    }
8
Alex Petrov

Nur für den Fall, dass dies für alle anderen nützlich ist, die über diese Frage stolpern und wie ich nach suchen - JavaScript an ein Drupal View anhängen. In Bezug auf D7 & Views 3.7 hat Folgendes für mich am besten funktioniert:

function HOOK_views_pre_render ( &$view ) { 
  /// check to make sure the view has a classname
  if ( $view->display_handler && !empty($view->display_handler->options['css_class']) ) {
    $cln = $view->display_handler->options['css_class'];
    $cls = 'CLASS GOES HERE';
    /// test that the classname contains our class
    if ( preg_match('/(^|\s+)' . preg_quote($cls) . '(\s+|$)/i', $cln) ) {
      /// build the path to the js, which is local to my module, js/view.js
      $sep = DIRECTORY_SEPARATOR;
      $dir = rtrim(drupal_get_path('module', 'HOOK'), $sep);
      $pth = "{$dir}{$sep}js{$sep}view.js";
      drupal_add_js($pth);
    }
  }
}

Dies war von Vorteil, da ich den Code in meinem Modul und nicht im Thema behalten wollte, da die durch JavaScript erzielten Verbesserungen nichts mit dem visuellen Erscheinungsbild zu tun hatten.

HINWEIS : Offensichtlich sollte HOOK an beiden Stellen durch Ihren Modulnamen ersetzt werden und CLASS GOES HERE sollte auch durch die gesuchte Klasse ersetzt werden.

6
Pebbl

Wenn Sie auf drupal 6 oder 7) sind, können Sie auch Javascript-Assets in den Modulkontext einfügen, um Assets hinzuzufügen. Dies erfordert Kontext, aber Sie können sicher sein, dass er immer enthalten ist, wenn der Ansicht wird gerendert.

https://drupal.org/project/context_addassets

Von der Projektseite des Moduls:

Wollten Sie schon immer Javascript oder CSS einfügen, wenn eine bestimmte Ansicht oder ein bestimmter Block gerendert wird? Oder wollten Sie schon immer Javascript oder CSS nur für die Startseite einfügen, ohne Code schreiben zu müssen?

Mit Context Add Assets können Sie dies tun. Es hat eine einfach zu bedienende Benutzeroberfläche, mit der Sie dies alles tun können, ohne Code zu schreiben. Da ctools verwendet wird, kann all dies auch exportiert werden.

4
chrisjlee

Schreiben Sie JavaScript-Code, der mit jQuery's hasClass () nach einer bestimmten Klasse in der Ansicht sucht, und fügen Sie Ihre JavaScript-Datei hinzu, wenn die Bedingung erfüllt ist.

Eine andere Möglichkeit besteht darin, eine Vorlage für Ihre Ansicht einzufügen und JavaScript-Code über diese Vorlage mit drupal_add_js () hinzuzufügen.

2
niksmac