2012-05-09 32 views
6

W Yii obecnie wszystkie zalegania jQuery ładują lokalną wersję jquery, która, jak sądzę, wynosi 1.6. *, Un-minified.Jak przesłonić główny plik jquery z zewnętrznie hostowaną jquery z google

Coś wzdłuż linii:.

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

Chciałbym zaktualizować dependancy rdzeń jQuery użyć jQuery 1.7 * od google

Zasadniczo chciałbym to

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

u dołu wszystkich moich stron, gdy jquery jest zależne.

+1

Zakładając, że z jakiegoś powodu nie możesz wejść do kodu i po prostu zmienić znacznik skryptu? – JakeParis

+0

tag jest automatycznie generowany w widoku przez dowolny komponent, który wymaga "jquery". Nie można zmienić znacznika skryptu. –

+0

@BenRowe: Kiedy jest już za późno, jest za późno. Napraw kod lub zmień dane wyjściowe przed wysłaniem do przeglądarki. – hakre

Odpowiedz

14

Jest też 'komponenty' inna metoda seen in yii's docs:

Dla na przykład możemy dodać plik jquery.js z serwerów Google zamiast własnego serwera. Aby to zrobić, musimy najpierw skonfigurować mapowania skryptów następująco,

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

Poprzez mapowanie tych plików skryptów false, powstrzymujemy Yii od generowania kodu w celu uwzględnienia tych plików. Zamiast piszemy następujący kod na naszej stronie aby bezpośrednio dołączyć pliki skryptów z 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

dziękuje, dobrze wiedzieć, że jest również dostępna! –

+0

Ta metoda wydaje się przestać działać w wersji 1.1.16 ... szkoda, użyłem jej wcześniej dla moich własnych rzeczy i teraz muszę znaleźć nową metodę. Smutna mina. –

+0

@IngwiePhoenix thanx za powiadomienie o tym, zbadam i zaktualizuję odpowiedź, odpowiednio. kciuki w górę! –

25

Po nieco więcej googlowania & rozglądając się, znalazłem odpowiedź:

w config, pod

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

+1, to wygląda dobrze, jest inna metoda wymieniona w dokumentach Yii, sprawdź moją odpowiedź, jednak twoja metoda wydaje się czystsza –

+2

@BenRowe: W tym link do tego, co pomogło ci być bardzo dobrym dla osób, które natrafią na tę odpowiedź w przyszłości. – Jon

+0

Uwielbiam tę odpowiedź, wyczyść i wykorzystaj ponownie rozwiązanie! – GusDeCooL

2

Najpierw Google obrażeń: http://www.yiiframework.com/wiki/259/serve-jquery-and-jquery-ui-from-google-s-cdn/

Obok przesłanianie konfigurację clientScript, można też chcą zastąpić 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

Wiem, ten wątek jest dość stary. Ale ze względu na to, że miałem do czynienia z encoutnerem, uważam, że byłoby to ważne.

Gdzieś w najnowszych wydaniach Yii, szybko przekierowałem z wersji 1.1.11 do obecnej, mechanizm pakietów nie został po prostu zaimplementowany, ale ulepszony. Poprzednio istniało, ale teraz faktycznie miało się do tego odwołać, gdzie pierwotnie określona i zaznaczona metoda ustawienia części jquery na false przestałaby działać. Chociaż dowiedziałem się, jak to naprawić!

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

To jest wzięte prosto z mojego kodu, ale ilustruje, jak to zrobiłem. Zasadniczo dodałem pozycję jQuery do listy pakietów. Po rozwiązaniu skryptów Core, ta lista jest przeszukiwana przed rzeczywistym CoreScripts. W związku z tym zostanie to odebrane jako pierwsze i możesz w ten sposób dodać swoją osobistą wersję jQuery.

Mam nadzieję, że to pomoże!

Powiązane problemy