2012-05-09 9 views
6

En Yii, actualmente todas las dependencias de jquery están cargando una versión local de jquery, que creo que es 1.6. *, No minificada.Cómo anulo el archivo jquery central con el jquery alojado externamente de google

Algo a lo largo de las líneas de:.

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

me gustaría actualizar la dependencia núcleo de jQuery para usar el jQuery 1.7 * desde google

Básicamente me gustaría incluir

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

en la parte inferior de todas mis páginas siempre que jquery sea una dependencia.

+1

Suponiendo que no puede entrar en el código por alguna razón y simplemente cambie la etiqueta del script? – JakeParis

+0

la etiqueta se genera automáticamente en la vista por cualquier componente que requiera 'jquery'. No es posible cambiar la etiqueta del script. –

+0

@BenRowe: cuando es demasiado tarde, es demasiado tarde. Repare su código o cambie el resultado antes de enviarlo al navegador. – hakre

Respuesta

14

Hay 'componentes' también otro método seen in yii's docs:

Para Por ejemplo, podemos incluir jquery.js de los servidores de Google en lugar de nuestro propio servidor. Para ello, en primer lugar configurar el ScriptMap de la siguiente manera,

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

Mediante la cartografía de estos archivos de comandos en false, evitamos Yii de generar el código para incluir estos archivos. En su lugar, se escribe el siguiente código en nuestras páginas para incluir explícitamente los archivos de comandos de 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

¡gracias, es bueno saber que esto también está disponible! –

+0

Ese método parece haber dejado de funcionar en 1.1.16 ... muy mal, lo usé antes para mis cosas y ahora necesito buscar un nuevo método. Cara triste. –

+0

@IngwiePhoenix gracias por informarme de esto, voy a investigar y actualizar la respuesta, en consecuencia. ¡Pulgares hacia arriba! –

25

Después de un poco más de googlear & mirando a su alrededor, he encontrado la respuesta:

en la configuración, bajo

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

+1, que se ve bien, hay otro método en la lista de documentos de yii, verifique mi respuesta; sin embargo, su método parece más limpio –

+2

@BenRowe: Incluye un enlace a lo que lo ayudó ser muy bueno para las personas que encuentren esta respuesta en el futuro. – Jon

+0

¡Me encanta esta solución de limpieza y reutilización! – GusDeCooL

2

Primera Google golpeó: http://www.yiiframework.com/wiki/259/serve-jquery-and-jquery-ui-from-google-s-cdn/

Junto a anular la configuración ClientScript, es posible que también desee anular la configuración de widgetFactory:

<?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 sé, este tema es bastante antiguo. Pero debido a un cambio que acabo de tener, creo que sería importante mencionar esto.

En algún lugar de las últimas versiones de Yii, avancé rápidamente de 1.1.11 a la actual, un mecanismo de paquetes no solo se implementó sino que se mejoró. Había existido previamente, pero ahora llegó a apuntar, donde el método originalmente establecido y marcado de establecer la parte jquery en false ya no funcionaría. Sin embargo, ¡descubrí cómo solucionarlo!

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

Esto se toma directamente de mi código, pero ilustra cómo lo hice. Básicamente, agregué una entrada jQuery a la lista de paquetes. Cuando se resuelven los scripts Core, se busca en esta lista antes de los CoreScripts actuales. Por lo tanto, esto se recogerá primero y puede agregar su versión personal de jQuery de esta manera.

Espero que ayude!

Cuestiones relacionadas