2012-05-09 7 views
6

In Yii, attualmente tutte le dipendenze per jquery stanno caricando una versione locale di jquery, che credo sia 1.6. *, Non minorato.Come sovrascrivere il file jquery principale con jquery ospitato esternamente da google

Qualcosa lungo le linee di:.

<script src="/assets/2343/js/jquery.js"></script> 

desidero aggiornare la dipendenza nucleo jquery utilizzare il jquery 1,7 * da google

Fondamentalmente desidero includere

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"> 

nella parte inferiore di tutte le mie pagine ogni volta che jquery è una dipendenza.

+1

Supponendo che non si possa entrare nel codice per qualche motivo e basta cambiare il tag dello script? – JakeParis

+0

il tag viene generato automaticamente nella vista da qualsiasi componente che richiede 'jquery'. Non è possibile cambiare il tag dello script. –

+0

@BenRowe: Quando è troppo tardi, è troppo tardi. Risolvi il tuo codice o modifica l'output prima che venga inviato al browser. – hakre

risposta

14

c'è anche un altro metodo seen in yii's docs:

Per Ad esempio, possiamo includere jquery.js dai server di Google invece del nostro server. Per farlo, abbiamo configurare prima le ScriptMap come segue,

$cs=Yii::app()->clientScript; 
$cs->scriptMap=array(
'jquery.js'=>false, 
'jquery.ajaxqueue.js'=>false, 
'jquery.metadata.js'=>false, 
...... 
); 

Con la mappatura di questi file di script su false, impediamo Yii di generare il codice per includere questi file. Invece, scriviamo il seguente codice nelle nostre pagine per includere esplicitamente i file di script da parte di Google,

<head> 
<?php echo CGoogleApi::init(); ?> 

<?php echo CHtml::script(
CGoogleApi::load('jquery','1.3.2') . "\n" . 
CGoogleApi::load('jquery.ajaxqueue.js') . "\n" . 
CGoogleApi::load('jquery.metadata.js') 
); 
?> 
...... 
</head> 
+1

grazie, buono a sapersi questo è anche disponibile! –

+0

Questo metodo sembra aver smesso di funzionare a 1.1.16 ... peccato, l'ho usato prima per le mie cose e ora ho bisogno di cercare un nuovo metodo. Faccia triste. –

+0

@IngwiePhoenix Grazie per averlo portato a conoscenza, indagherò e aggiornerò la risposta, di conseguenza. pollice su! –

25

Dopo un po 'di più googling & guardando in giro, ho trovato la risposta:

nella configurazione, in 'componenti'

'clientScript'=>array(
    'packages'=>array(
    'jquery'=>array(
     'baseUrl'=>'http://ajax.googleapis.com/ajax/libs/jquery/', 
     'js'=>array('1.7.2/jquery.min.js'), 
    ) 
    ), 
), 
), 
+0

+1, che sembra buono, c'è un altro metodo elencato nei documenti di yii, controlla la mia risposta, tuttavia il tuo metodo sembra più pulito –

+2

@BenRowe: Includere un collegamento a ciò che ti ha aiutato essere molto buono per le persone che si imbattono in questa risposta in futuro. – Jon

+0

Amo questa soluzione, pulita e riutilizza la soluzione! – GusDeCooL

2

Prima Google ha colpito: http://www.yiiframework.com/wiki/259/serve-jquery-and-jquery-ui-from-google-s-cdn/

Accanto sovrascrivendo la configurazione ClientScript, si potrebbe anche voler ignorare il widgetFactory config:

<?php 
    return array(
    // other config 
    'components'=>array(
    'clientScript'=>array(
     'packages'=>array(
     'jquery'=>array(
      'baseUrl'=>'//ajax.googleapis.com/ajax/libs/jquery/1/', 
      'js'=>array('jquery.min.js'), 
     ) 
    ), 
     // other clientScript config 
    ), 
    'widgetFactory'=>array(
     'widgets'=>array(
     'CJui<WidgetName>'=>array(// where <WidgetName> is the name of the JUI Widget (Tabs, DatePicker, etc.). Each CJuiWidget used must be declared 
      'scriptUrl'=>'//ajax.googleapis.com/ajax/libs/jqueryui/1/', 
      'theme'=>JUI-THEME, 
      'themeUrl'=>'//ajax.googleapis.com/ajax/libs/jqueryui/1/themes/', 
     ), 
     // Repeat for other CJuiWidgets 
    ), 
    ), 
    // other component config 
), 
    // other config 
); 
0

Lo so, questa discussione è piuttosto vecchia. Ma a causa di un enuncer che avevo appena fatto, penserei che sarebbe importante menzionarlo.

Da qualche parte nelle ultime versioni di Yii, ho fatto un veloce inoltro dalla versione 1.1.11 alla corrente, un meccanismo di pacchetti non è stato solo implementato ma migliorato. Era esistito in precedenza, ma ora in realtà è arrivato a un punto, in cui il metodo originariamente dichiarato e spuntato di impostare la parte jquery su false non funzionava più. Però, ho scoperto come aggiustarlo!

$cs->packages["jquery"] = [ 
    "basePath"=>Yii::app()->cdn->basePath, 
    "baseUrl"=>Yii::app()->cdn->baseUrl, 
    "js"=>["js/jquery-1.11.1.js"] 
]; 

Questo è preso direttamente dal mio codice, ma illustra come l'ho fatto. Fondamentalmente, ho aggiunto una voce jQuery all'elenco dei pacchetti. Quando gli script di base vengono risolti, questo elenco viene cercato su prima del i CoreScripts effettivi. Pertanto, questo verrà raccolto per primo e potrai aggiungere la tua versione personale di jQuery in questo modo.

Spero che aiuti!

Problemi correlati