Aggiornare jQuery in Drupal 6 ad una versione diversa da quella presente nel core presenta numerosi problemi che coinvolgono plugin come views, le funzioni AJAX e numerosi impostazioni di amministrazione. A tale scopo è stato inventato il plugin jQuery update il quale tuttavia ha mostrato fin da subito i suoi limiti. Solo di recente, nella guida ufficiale di Drupal è stato spiegato un metodo funzionante al 100% per evitare problemi di conflitto che ora andiamo ad analizzare.
Il problema
Si presenta all’utente la necessità di utilizzare un plugin jQuery che utilizzi funzionalità implementate in versioni recenti di jQuery, non supportate dalla versione 1.2.6 che invece Drupal 6 presenta nell’installazione di base.
Un altro problema, che di solito si presentava, era quello di poter aggiornare il core di Drupal tranquillamente senza vedere sovrascritto l’aggiornamento di jQuery (nel caso si fosse riusciti ad installare una versione aggiornata).
La soluzione
jQuery presenta la possibilità di essere utilizzato in più versioni e/o affiancato ad altre librerie Javascript (che utilizzando il $ come funzione o variabile) mediante l’utilizzo della funzione noConflict() e delle sue API.
Per utilizzare questa funzione all’interno del proprio tema di Drupal apriamo il file page.tpl.php e modifichiamolo così:
<head> <title>< ?php print $head_title; ?></title> < ?php print $head; ?> < ?php print $styles; ?> < ?php if (arg(0) != 'admin') { ?> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> <script type="text/javascript"> var $jq = jQuery.noConflict(); </script> < ?php } ?> < ?php print $scripts; ?> </head>
La riga
<?php if (arg(0) != 'admin') { ?>
controlla se la pagina aperta è una pagina di amministrazione (admin/*), e se di tale si tratta non include la nuova versione di jQuery, evitando conflitti. Non serve utilizzare questa funzionalità per i temi di Amministrazione, assicuriamoci quindi di aver spuntato l’opzione “Use administration theme for content editing” (utilizza un tema di amministrazione per la modifica dei contenuti) che si trova nel percorso Amministra -> Configurazione sito -> Tema amministrazione.
Con questo metodo jQuery 1.2.6 verrà caricato in ogni pagina e potrà essere utilizzato dal modulo Views, Draggable.js e da ogni chiamata Ajax. In aggiunta verrà caricata anche la nuova versione di jQuery (nell’esempio la 1.5) in modo che le due non interferiscano tra loro.
Eseguire uno script che utilizzi la versione più recente
Per eseguire gli scripts che richiedono l’utilizzo di una versione più recente di jQuery sarà necessario utilizzare $jq invece che $:
$jq(document).ready(function(){ $jq('#my-div').function(); });