Jak dodać wtyczkę Jquery do Drupala?

19

Czy powinienem po prostu wkleić kod do głównego pliku szablonu, czy jest jakiś inny zalecany sposób dołączania nowych wtyczek Jquery w Drupal 7?

Vonder
źródło
Jakiej wtyczki JQuery chcesz użyć i dlaczego? Zwykle dodawanie dowolnego rodzaju Javascript jest dodawane za pomocą funkcji drupal_add_js( api.drupal.org/api/drupal/includes--common.inc/function/… ).
Jamie Hollern,

Odpowiedzi:

15

Najprostszym sposobem jest dodanie go do pliku .info motywu:

scripts[] = js/my_jquery_plugin.js

Jedynym wyjątkiem jest dodawanie zewnętrznego zasobu (CDN / hostowany skrypt), w którym to przypadku należy użyć drupal_add_js (), jak wyjaśniono w Jamie Hollern

Alex Weber
źródło
1
Ale chromowana konsola mnie zmienia:Uncaught TypeError: undefined is not a function
TangMonk
@Alex Mam głupie pytanie. Wiem, że Drupal używa biblioteki jquery. Powiedzmy, że dodaję funkcję „powrót do góry”, używając idei „skrypty [] = js / back_to_top.js” w theme.info. Czy muszę również dodać plik jquery (jak jquery v1.9, v1.11)?
CocoSkin
@CocoSkin powinieneś być w porządku
Alex Weber
Właściwie nie. To nie zawsze działa. Dwa przykłady: 1) skrypty [] = js / jquery.hoverintent.js 2) skrypty [] = js / jquery.scrollme.js
sea26.2
Generalnie nie jest to dobry sposób na zrobienie tego. Jak kontrolujesz, na których stronach jest ładowany? Użyjdrupal_add_library()
anthonygore,
12

Drupal ma w pakiecie Jquery.

Aby dodać plik js, możesz użyć drupal_add_js w sposób opisany w innych postach.

Będzie to działać w prostych przypadkach, ale jeśli zaczniesz mieć wtyczki, które zależą od innych wtyczek. możesz zajrzeć do interfejsu API bibliotek . Spodziewam się, że z czasem zostaną utworzone moduły do ​​obsługi popularnych bibliotek, niektóre są dostępne dla interfejsu użytkownika JQuery, patrz system_library () .

W tym przykładzie z włączonym modułem jQuery ui.accordion możesz użyć drupal_add_library ()

drupal_add_library('system', 'ui.accordion');

To upewni się, że js jest dołączony wraz z CSS i wszelkimi bibliotekami, które od niego zależą. Zapewni to również, że biblioteki zostaną uwzględnione tylko raz.

Jeśli powiesz, której biblioteki używasz, mogę podać przykładowy kod, jak ją zdefiniować

Najpierw utwórz moduł, aby zdefiniować bibliotekę (nazwij go qtip) i prześlij moduł do folderu js pod folderem modułu

następnie zaimplementuj hook_library ()

function qtip_library() (
 $libraries['qTip'] = array(
    'title' => 'qTip', 
    'website' => 'http://craigsworks.com/projects/qtip/docs/', 
    'version' => '1.0.0-rc3', 
    'js' => array(
      drupal_get_path('module', 'qtip') . '/js/jquery.qtip-1.0.0.min.js' => array(),
    ),
    'dependencies' => array(
      array('system', 'jquery'),
    ),
  );
  return $libraries;
}

Następnie, aby dodać plik wstaw do kodu

drupal_add_library('qtip', 'qtip');

Może to być przesadą w przypadku prostej biblioteki, ale jeśli musisz zarządzać dużą liczbą bibliotek na wielu stronach i tematach, znacznie ułatwia to życie.

Jeremy French
źródło
Dzięki, korzystam z biblioteki QTip - craigsworks.com/projects/qtip
Vonder
5

Jeśli chcesz załadować skrypt tylko na niektóre strony (nie wszystkie), możesz dodać go poprzez plik template.php. Po prostu dodaj kod podobny do tego:

function YourTheme_preprocess_node(&$variables) {

 $node = $variables['node'];
if (!empty($node) && ($node->nid == 983)
 // here you can esily add more pages
) {

drupal_add_js('sites/all/libraries/jquery.ui/ui/ui.core.js');
drupal_add_js('sites/all/libraries/jquery.ui/ui/jquery-ui-1.7.3.custom.js');
drupal_add_js('sites/all/libraries/jquery.ui/ui/ui.progressbar.js');

drupal_add_css('sites/all/libraries/jquery.ui/themes/redmond/ui.progressbar.css');
drupal_add_css('sites/all/libraries/jquery.ui/themes/redmond/ui.core.css');
drupal_add_css('sites/all/libraries/jquery.ui/themes/redmond/ui.theme.css');
 }
}

Testowałem to tylko w Drupal 6.

Nebojsa
źródło
3

Możesz dodać plik JavaScript do motywu, którego używasz na stronie Drupal, dodając script[] =wiersz w pliku .info używanego motywu. Rozważę ten przypadek tylko wtedy, gdy używasz dostosowanego motywu lub zmodyfikowanej wersji istniejącego motywu, którego nazwa została zmieniona; Nie sugerowałbym tego, jeśli używasz na przykład Garland. W takich przypadkach oznaczałoby to utratę wszystkich zmian przy każdej aktualizacji motywu lub skopiowanie zaktualizowanych plików motywu, a następnie ponowne zastosowanie tych samych zmian, które zastosowano w poprzedniej wersji plików; jeśli zmiana polega tylko na dodaniu script[]wiersza, to zmiana jest minimalna i warto ją zrobić, ale oznaczałoby to również, że pliki JavaScript nie są dodawane w katalogu zawierającym pliki motywu lub pliki JavaScript należy dodawać co czas aktualizacji motywu.

Alternatywnie możesz utworzyć moduł niestandardowy lub dodać kod do istniejącego modułu niestandardowego, którego już używasz dla tej witryny.
Zaletą jest to, że pliki JavaScript byłyby dodawane do każdego motywu ustawionego jako domyślny, lub motyw administracyjny, bez potrzeby zmiany wszystkich motywów, które są włączone w witrynie, i że użytkownicy mogą sami wybrać.

Jak już hook_init()wspomniano w innej odpowiedzi, należy zastosować hak. Dodam, że hook_library()jest to nowy haczyk dodany w Drupal 7 do plików Javascript, takich jak wtyczki jQuery.

kiamlaluno
źródło
3

Za pomocą modułu Js Injector można dodawać skrypty bezpośrednio w panelu administracyjnym Drupal. Alternatywnie możesz użyć funkcji drupal_add_js (), aby dodać plik js do strony.

Shabir A.
źródło
Myślę, że to jest dokładnie to, czego potrzebuję, wybiorę twoją odpowiedź jako najlepszą, ale chcę sprawdzić, czy najpierw istnieją inne rozwiązania;)
Bruno Vincent
możesz dodać tę linię do skryptu theme.info [] = 'ścieżka do pliku', która jest jedną metodą, ale dzięki tej metodzie js zostanie załadowany na wszystkie strony, co zwykle nie jest dobrą praktyką. Za pomocą powyższych dwóch metod możesz dodać plik js na dokładnie tych stronach, które chcesz.
Shabir A.
1

Możesz stworzyć prosty niestandardowy moduł i dodać go w ten sposób. Kod byłby podobny do następującego:

MYMODULE_init() {
  drupal_add_js(drupal_get_path('module', 'MYMODULE') . '/FILE.js');
}
Jamie Hollern
źródło
niestandardowy moduł do dodawania JQuery? Poważnie?
Vonder
tylko jeśli jest zewnętrzny, zobacz moją odpowiedź
Alex Weber,
1

Możesz po prostu użyć, YOURTHEME_preprocess_theme()jeśli chcesz zastosować warunek logiczny:

drupal_add_js(drupal_get_path('theme','your_theme').'/js/yourplugin.js');

i dodaj również w pliku yourtheme.info:

scripts[] = js/yourplugin.js

gbwebservice
źródło
1

Jeśli używasz modułu Context, zainstaluj Context Add Assets. Skonfiguruj kontekst globalny lub określony i dodaj nową reakcję, aby dodać zasób JS według ścieżki lub modułu.

Nie wymaga kodowania.

ebeyrent
źródło
Dzięki! Ma to tę zaletę, że można ograniczyć biblioteki do określonych ścieżek, ale kodowanie nie jest wymagane.
Druvision,
1
Ale dla wtyczek jQuery, takich jak textext.js, które zawierają średnio 5 plików CSS i 5 plików JS, nadal jest dużo pracy.
Druvision,
1

Istnieje wiele bibliotek zewnętrznych, które należy obecnie uwzględnić.

Umieszczenie ich wszystkich w katalogu js kompozycji nie zawsze jest pożądane, ponieważ czasami biblioteki te składają się z wielu plików js i wielu plików css.

Skończyło się na tym, że użyłem libraries_get_pathfunkcji modułu bibliotek do pobrania ich ścieżek z katalogu strony / wszystkie / biblioteki:

Oto jak dodałem wybrane pliki, które odnoszą się do textext.js:

<?php 
function MYMODULE_init() {

  // Add jQuery library to a specific page.
  if (arg(0) == 'messages' && arg(1) == 'new') {
    // Add the jQuery TextExt library ( http://textextjs.com/ )
    $libdir = libraries_get_path('jquery-textext');
    drupal_add_js("$libdir/src/js/textext.core.js");
    drupal_add_js("$libdir/src/js/textext.core.js");
    drupal_add_js("$libdir/src/js/textext.plugin.tags.js");
    drupal_add_js("$libdir/src/js/textext.plugin.autocomplete.js");
    drupal_add_js("$libdir/src/js/textext.plugin.suggestions.js");
    drupal_add_js("$libdir/src/js/textext.plugin.filter.js");
    drupal_add_js("$libdir/src/js/textext.plugin.focus.js");
    drupal_add_js("$libdir/src/js/textext.plugin.prompt.js");
    drupal_add_js("$libdir/src/js/textext.plugin.ajax.js");
    drupal_add_js("$libdir/src/js/textext.plugin.arrow.js");

    drupal_add_css("$libdir/src/css/textext.core.css");
    drupal_add_css("$libdir/src/css/textext.plugin.tags.css");
    drupal_add_css("$libdir/src/css/textext.plugin.autocomplete.css");
    drupal_add_css("$libdir/src/css/textext.plugin.focus.css");
    drupal_add_css("$libdir/src/css/textext.plugin.prompt.css");
    drupal_add_css("$libdir/src/css/textext.plugin.arrow.css");
  }

} ?>

Chciałbym usłyszeć, czy istnieje zewnętrzne repozytorium, w którym wszystkie te biblioteki są wstępnie zdefiniowane, więc nie będę musiał definiować ich ręcznie.

Druvision
źródło
Jak dodajesz do niego strony?
Umair,
0

to działało dla mnie, nie trzeba tworzyć modułu dla wtyczki jQuery ani instalować - w moim template.php dodałem:

function YOURTHEME_js_alter(&$javascript){
    // overwriting for newer jQuery version
    $javascript['misc/jquery.js']['data'] = path_to_theme() . '/assets/js/jquery-1.9.0.js';
    // also the min...
    $javascript['misc/ui/jquery.ui.core.min.js']['data'] = path_to_theme() . '/assets/js/jquery-ui-1.10.0.custom.min.js';
    // here I add the library (jQuery plugin) to resolve an error -> $.browser.msie undefined
    $javascript[path_to_theme() . '/assets/js/jquery-migrate-1.1.0.min.js'] = array(   
        "group" => -100,
        "weight" => -18.990,
        "version" => "1.1.0",
        "every_page" => true,
        "type" =>   "file",
        "scope" => "header",
        "cache" => true,
        "defer" => false,
        "preprocess" => true,
        "data" =>  path_to_theme() . '/assets/js/jquery-migrate-1.1.0.min.js',
    );

}
David Moldenhauer
źródło
-4

innym sposobem jest dodanie następującego kodu do pliku
page.tpl.php drupal_add_js (drupal_get_path ('theme', 'path / to / your / plugin'). '/plugin.js', 'file');

houmem
źródło
4
Dodawanie kodu bezpośrednio do szablonów jest uważane za złą praktykę.
mpdonadio
„Dodawanie kodu bezpośrednio do szablonów jest uważane za złą praktykę” ... więc moduł wtryskiwacza SQL jest najlepszą praktyką?
Bruno Vincent,
Kilka innych wymienionych sposobów można uznać za dobrą praktykę @BrunoVincent, zależy to od poziomu, na którym chcesz to zaatakować (kod w motywie, kod w niestandardowym module lub po prostu zainstaluj moduł, taki jak js injector)
Clive
w niektórych przypadkach warto to zrobić, na przykład chcesz dodać warunek do pliku javascript
houmem