Inclusa una versione jQuery diversa solo su una pagina specifica


16

Il modulo di aggiornamento jQuery include questo script.

<script type="text/javascript" src="/sites/all/modules/jquery_update/replace/jquery.min.js?6"></script>

Ho bisogno di questo su ogni pagina, ad eccezione di un determinato file modello che sto usando fancy box, e ho bisogno di una versione successiva di jQuery.

Devo escludere l'aggiornamento di jQuery dal mettere lo script sopra nella $scriptsvariabile SOLO su page-media-photos.tpl.php. Come posso raggiungere questo obiettivo?

Risposte:


10

Ecco le tue opzioni:

  • Usa jQuery Multi , come indicato in un'altra risposta. Può essere configurato per caricare la versione superiore di jQuery proprio su quella pagina e solo per la scatola fantasia. Non interferirà con il jQuery di Drupal o con il jQuery di jquery_update.
  • In Drupal 7, puoi usare hook_js_alter () , che ti permetterà di scambiare la versione di jquery_update con quello che vuoi.
  • In Drupal 6 con jQuery Update , fornisce un hook che ti consente di modificare JS dopo aver terminato di fare le sue cose. Puoi guardare il codice jQuery Multi 6.x per vedere come usa questo hook .
  • In Drupal 6 senza jQuery Update , puoi farlo usando un hook preprocess_page. La $scriptsvariabile sarà disponibile lì e puoi cambiarla. Questo può diventare un po 'complicato. Puoi anche vedere come fa qmulti . jQuery Update fa anche questo in modo simile.

Ricorda che passare a una versione jQuery superiore può rompere alcune cose nel core di Drupal e contribuire, che è il problema che jQuery Multi risolve. Quindi, se lo fai, assicurati di non rompere nulla. Il vantaggio qui è che carichi semplicemente il jQuery di cui hai bisogno, mentre con jQuery Multi caricherai entrambi.


Nota, hook_js_alter non è disponibile in D6
David Thomas,

2
Modificata la risposta per avere anche le informazioni D6.
Goron,

Sono d'accordo con l'utilizzo di jQuery multi se si desidera eseguire più versioni di jQuery. Consiglierei l'aggiornamento di jquery solo se si desidera eseguire la versione più recente per l'intero sito. Inoltre, nella mia esperienza, l'aggiornamento di jquery per jquery 1.7 e 1.8 è ancora da usare per la produzione.
rooby

3

C'è un modulo jQuery multi . Questo modulo ti consente di avere multiple versions of jQuery run parallelsulla tua istanza di drupal. Fornisce un aliasper ogni istanza che puoi usare per chiamare quella versione di jquery.


3

Se hai problemi con jqueryupdate e visualizza le pagine di amministrazione (ad esempio) prova a installare la versione Dev di ctools e tutto andrà bene, ho appena testato me stesso.


3

Questo codice può essere utile, inserisci questo codice nel tuo template.php

function MYTHEME_preprocess_page(&$vars) {
  $scripts = drupal_add_js();
  if (in_array('page-media-photos', $vars['template_files'])) {
    unset($scripts['all']['module']['PATH_OF_JS_NEED_TO_REMOVE']);
  }
  $vars['scripts'] = drupal_get_js('header', $scripts);
}

PATH_OF_JS_NEED_TO_REMOVE indica il percorso di js per ex: sites / all / modules / og / og.js


funzione phptemplate_preprocess_page (& $ vars) {$ scripts = drupal_add_js (); if (in_array ('page-media-photos', $ vars ['template_files'])) unset ($ scripts ['all'] ['module'] ['/ sites / all / modules / jquery_update / sostituisci / jquery. min.js']); $ vars ['scripts'] = drupal_get_js ('header', $ scripts); } questo non sembra funzionare
albo il

Ho effettuato l'upgrade ma non funziona
albo il

Ho aggiornato il codice per indicare che è necessario sostituire MYTHEME con il nome del tema anziché utilizzare "phptemplate". Inoltre, non consiglierei di usare questo tipo di approccio per rimuovere una libreria da cui dipendono altri js, come jQuery, perché questo non tiene conto dell'ordine in cui js è caricato e potresti finire con jquery se non sono definiti errori se altri I plugin jQuery sono caricati prima di una versione di jQuery. Inoltre, il modo in cui funziona l'aggiornamento jQuery è più complesso della semplice disinserimento di un file js.
rooby

2

Drupal 7

Puoi chiamare jquery_update_jquery_replace()su una pagina specifica (es. In hook_library_alter()) come dimostrato qui da drupalmoff :

<?php
/**
 * Implements hook_module_implements_alter().
 */
function your_module_module_implements_alter(&$implementations, $hook){
  if( $hook == 'library_alter' ){
    $group = $implementations ['your_module'];
    unset($implementations ['your_module']);
    $implementations ['your_module'] = $group;
  }
}

/**
 * Implements hook_library_alter().
 */
function your_module_library_alter(&$javascript, $module) {
  if( $module === 'system' && current_path() == 'path/to/page' ) {
    // Make sure we inject either the minified or uncompressed version as desired.
    $min = variable_get('jquery_update_compression_type', 'min') == 'none' ? '' : '.min';
    $cdn = variable_get('jquery_update_jquery_cdn', 'none');
    $path = drupal_get_path('module', 'jquery_update');

    $version = '1.7';

    jquery_update_jquery_replace($javascript, $cdn, $path, $min, $version);
  }
}
?>

Drupal 6

La mia soluzione era cambiare JQUERY_UPDATE_REPLACE_PATHcostante prima di jquery_updatecaricarla:

<?php
/**
 * Replace jQuery files on specified paths (fix for IE 6&7 - jQuery bug: bugs.jquery.com/ticket/6498)
 */
// if (array_search($_GET['q'], array('my_page')) !== FALSE) {
if (arg(0) == 'node' && arg(1) == '123') {
  define('JQUERY_UPDATE_REPLACE_PATH', 'sites/all/libraries/jquery/1.5.2');
}
?>

Quindi può essere aggiunto all'inizio del file .module (che è stato caricato in precedenza jquery_update, oppure provare nel file delle impostazioni.


Non dirottare la tua risposta, ma forse vuoi anche aggiungere la variante D8 di essa?
Pierre.Vriens,

Non ho giocato 8 troppo, quindi non sono sicuro di quale sarebbe la soluzione per D8, mi dispiace. Sentiti libero di suggerire la modifica o pubblicare una risposta. Oppure potrebbe valere la pena di creare un'altra domanda specifica per D8.
Kenorb,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.