Drupal'a Jquery eklentisi nasıl eklenir?


19

Kodu sadece ana şablon dosyasına yapıştırmalı mıyım yoksa Drupal 7'de yeni Jquery eklentileri eklemenin başka bir yolu var mı?


Ne tür bir JQuery eklentisi kullanmak istiyorsunuz ve neden? Normalde drupal_add_js( api.drupal.org/api/drupal/includes--common.inc/function/… ) işlevi kullanılarak herhangi bir tür Javascript eklenir .
Jamie Hollern

Yanıtlar:


15

En kolay yol, onu temanızın .info dosyasına eklemektir:

scripts[] = js/my_jquery_plugin.js

Tek istisna, harici bir kaynak (CDN / barındırılan komut dosyası) ekliyorsanız, bu durumda Jamie Hollern tarafından açıklandığı gibi drupal_add_js () kullanmanız gerekir


1
Ancak krom konsolu beni değiştirdi:Uncaught TypeError: undefined is not a function
TangMonk

@Alex aptalca bir sorum var. Drupal'ın jquery kütüphanesi kullandığını biliyorum. Theme.info'da "script [] = js / back_to_top.js" fikrinizi kullanarak "başa dön" işlevini eklediğimi varsayalım. Ayrıca jquery dosyasını da eklemem gerekiyor mu (jquery v1.9, v1.11 gibi)?
CocoSkin

@CocoSkin iyi olmalısın
Alex Weber

Aslında hayır. Bu her zaman işe yaramaz. İki örnek: 1) komut dosyaları [] = js / jquery.hoverintent.js 2) komut dosyaları [] = js / jquery.scrollme.js
sea26.2

Genellikle bunu yapmanın iyi bir yolu yoktur. Hangi sayfalara yüklendiğini nasıl kontrol edersiniz? Kullanımdrupal_add_library()
anthonygore

12

Drupal, Jquery ile birlikte paketlenmiştir.

Bir js dosyası eklemek için drupal_add_js komutunu diğer yazılarda açılmış şekilde kullanabilirsiniz.

Bu basit durumlarda işe yarar, ancak diğer eklentilere bağlı eklentilere sahip olmaya başlarsanız. api kütüphanelerine bakmak isteyebilirsiniz . Ben zaman modülleri popüler kütüphaneleri desteklemek için oluşturulacak bekliyoruz, bkz: system_library () inşa JQuery ui için bazı .

Bu örnekte jQuery ui.accordion modülünü dahil etmek için drupal_add_library () kullanabilirsiniz

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

Bu, js'nin CSS ve ona bağlı tüm kütüphanelerle birlikte eklenmesini sağlayacaktır. Ayrıca kütüphanelerin sadece bir kez dahil edilmesini sağlayacaktır.

Hangi kütüphaneyi kullandığınızı söylüyorsanız, nasıl tanımlayacağınıza ilişkin örnek kod sağlayabilirim

Bu yüzden önce kütüphaneyi tanımlamak için bir modül oluşturun (buna qtip deyin) ve modülü modül klasörünün altındaki bir js klasörüne yükleyin

sonra hook_library () uygulayın

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

Sonra kodu koymak dosya eklemek

drupal_add_library('qtip', 'qtip');

Bu, basit bir kütüphane için aşırıya kaçabilir, ancak birden fazla site ve tema üzerinde çok sayıda kütüphaneyi yönetmeniz gerekiyorsa, hayatı çok daha kolay hale getirir.


Teşekkürler, QTip kütüphanesini kullanıyorum - craigsworks.com/projects/qtip
Vonder

5

Komut dosyasını yalnızca bazı sayfalara (tümü değil) yüklemek istiyorsanız, template.php dosyanızla ekleyebilirsiniz. Buna benzer bir kod eklemeniz yeterlidir:

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

Bunu sadece Drupal 6'da test ettim.


3

script[] =Kullandığınız temanın .info dosyasına bir satır ekleyerek Drupal sitesinde kullandığınız temaya bir JavaScript dosyası ekleyebilirsiniz . Bu durumu yalnızca özelleştirilmiş bir tema veya yeniden adlandırılmış mevcut bir temanın değiştirilmiş bir sürümünü kullanıyorsanız düşünürüm; Örneğin Garland kullanıyorsanız bunu yapmanızı önermem. Bu gibi durumlarda, temanın tüm güncellendiğinde tüm değişiklikleri kaybetmek veya güncellenen tema dosyalarını kopyalamak ve daha sonra dosyaların önceki sürümüne uygulanan değişiklikleri yeniden uygulamak anlamına gelir; değişiklik yalnızca bir script[]satır ekliyorsa , değişiklik asgari düzeydedir ve bunu yapmaya değer olabilir, ancak aynı zamanda JavaScript dosyalarının tema dosyalarını içeren dizine eklenmediği veya her JavaScript dosyasını eklemeniz gerektiği anlamına gelir. tema güncellendiğinde.

Alternatif olarak, özel bir modül oluşturabilir veya o site için kullanmakta olduğunuz mevcut bir özel modüle kod ekleyebilirsiniz.
Pro, JavaScript dosyalarının her temaya ekleneceği, sitede etkinleştirilen tüm temaları değiştirmeye gerek kalmadan varsayılan veya yönetim teması olarak ayarlanmış olması ve kullanıcıların kendileri için seçebilmesidir.

Başka bir cevapta daha önce bildirildiği gibi, hook_init()uygulamanız gereken kanca. hook_library()JQuery eklentileri gibi Javascript dosyaları için Drupal 7'de eklenen yeni kanca ekleyeceğim .


3

Doğrudan Drupal yönetici panelinde komut dosyaları eklemek için Js Injector modülünü kullanabilirsiniz . Alternatif olarak , js dosyanızı sayfanıza eklemek için drupal_add_js () işlevini kullanabilirsiniz.


Sanırım tam olarak ihtiyacım olan şey bu, cevabınızı en iyi şekilde seçeceğim, ama önce diğer çözümlerin olup olmadığını görmek istiyorum;)
Bruno Vincent

bu satırı theme.info script'inize ekleyebilirsiniz [] = 'yolunuzun yolu' bu bir yöntemdir, ancak bu yöntemle js normalde iyi bir uygulama olmayan tüm sayfalarınıza yüklenir. Yukarıdaki iki yöntemle js'i tam olarak istediğiniz sayfalara ekleyebilirsiniz.
Shabir A.

1

Basit bir özel modül oluşturabilir ve bu şekilde ekleyebilirsiniz. Kod aşağıdakine benzer:

MYMODULE_init() {
  drupal_add_js(drupal_get_path('module', 'MYMODULE') . '/FILE.js');
}

JQuery eklemek için özel modül? Ciddi anlamda?
Vonder

sadece harici ise, cevabımı gör
Alex Weber

1

YOURTHEME_preprocess_theme()Mantıksal koşul uygulamak istiyorsanız sadece kullanabilirsiniz :

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

ve temanız.info dosyanıza da ekleyin:

scripts[] = js/yourplugin.js


1

Bağlam modülünü kullanıyorsanız Bağlam Ekleme Varlıkları yükleyin. Genel bir bağlam veya belirli bir bağlam oluşturun ve JS öğesini yola veya modüle göre eklemek için yeni bir reaksiyon ekleyin.

Kodlama gerekmez.


Teşekkürler! Bunun avantajı, kütüphaneleri belirli yollarla sınırlayabilmenizdir, ancak kodlamaya gerek yoktur.
Druvision

1
Ancak ortalama 5 CSS ve 5 JS dosyası içeren textext.js gibi jQuery eklentileri için hala çok iş var.
Druvision

1

Günümüzde eklenmesi gereken birçok dış kütüphane bulunmaktadır.

Hepsini bu temanın js dizini altına koymak her zaman arzu edilmez, çünkü bazen bu kütüphaneler birden fazla js dosyasından ve birden fazla css dosyasından oluşur.

Ben libraries_get_pathsiteleri / all / libraries dir yollarını almak için kütüphaneler modülünün işlevini kullanarak sona erdi :

İşte textext.js ile ilgili seçilen dosyaları nasıl ekledi:

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

} ?>

Bu kütüphanelerin hepsinin önceden tanımlandığı harici bir depo olup olmadığını duymak isterim, böylece her birini manuel olarak tanımlamak zorunda kalmayacağım.


İçine nasıl sayfa eklersiniz?
17'de Umair


0

Benim için işe yarayan şey budur, jQuery eklentisi için bir modül oluşturmaya veya birini kurmaya gerek yok - benim template.php ekledim:

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

}

-4

başka bir yol da aşağıdaki kodu page.tpl.php dosyasına
drupal_add_js (drupal_get_path ('theme', 'path / to / your / plugin')) eklemektir. '/plugin.js', 'file');


4
Doğrudan şablonlara kod eklemek kötü bir uygulama olarak kabul edilir.
mpdonadio

"Şablonlara doğrudan kod eklemek kötü uygulama olarak kabul edilir" ... SQL enjektör modülü o zaman en iyi uygulama?
Bruno Vincent

Bahsedilen diğer yollardan birkaçı iyi uygulama olarak kabul edilebilir @BunoVincent, buna hangi seviyeye saldırmak istediğinize bağlıdır (bir temadaki kod, özel bir modüldeki kod veya sadece js enjektör gibi bir modül takın)
Clive

bazı durumlarda böyle yapmak yararlı olabilir, örneğin bir javascript dosyası eklemek istiyorum conditionnaly
houmem
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.