Caricare Jquery

Se carico jquery dagli asset con l’ html che compare commentato qui sotto me lo carica.

Se cerco di caricarlo come si dovrebbe (seconda riga) ignora l’istruzione: fa come se

non esistesse.

(su altre pagine jquery funziona, normalmente richimato da widget. Questa pagina è un po’diversa dalle altre

perchè è aperta da javascript, ma non dovrebbe fare differenza, no?)

<!–script type="text/javascript" src="http://localhost/G/gal/assets/5441cf77/jquery.js"></script–>

<?php Yii::app()->clientScript->registerCoreScript(‘jquery’); ?>

Boh. Devo aver fatto una scemenza troppo grossa per vederla!..

Io ho fatto così:

Ho messo dentro a protected/vendor la cartella scaricata di jquery, così ho protected/vendor/jquery/jquery-1.11.0.min.js

Quindi nel file protected/config/main.php ho inserito questo





		'clientScript' => array(

			'packages' => array(

				'jquery' => array(

					'basePath' => "application.vendor.jquery",

					'js' => array('jquery-1.11.0.min.js'),

					'coreScriptPosition' => CClientScript::POS_HEAD,

				),


			)

		),




A questo punto, nel mio caso nel file main.php del layout carico jquery così




<?php Yii::app()->getClientScript()->registerCoreScript( 'jquery' ); ?>



Questa è sempre la strada migliore e NON crea alcun tipo di conflitto. almeno a me in tanti mesi non ha mai dato problemi, ed ho SEMPRE l’ultima versione di jQuery.

Se hai dei package js+css, è il metodo migliore in assoluto questo.

Qualsiasi cosa succeda, non accedere mai direttamente alle cartelle assets pubblicate… c’è sempre una strada migliore.

tieni conto che il nome della cartella pubblicata potrebbe cambiare

Ciao realtebo,

la strada che hai indicato mi è sembrata interessante e l’ho provata, ma quando carica la configurazione

mi dice che:

Property "CWebApplication.clientScript" is read only.

e la documentazione conferma che è read-only, quindi sono bloccato.

Sul fatto di non accedere direttamente alle cartelle asset non potrei essere più d’ accordo! Infatti sto

proprio cercando una strada per evitarlo…

PS: la cosa che mi dà più fastidio è che Yii ignora l’istruzione

Yii::app()->clientScript->registerCoreScript(‘jquery’);

desse almeno un errore!

grazie per la collaborazione e saluti agli amici de forum.

non capisco l’errore, il codice che ti ho passato è copia/incollato da codice ‘live’ di produzione…

potresti mica copia/incollarmi il tuo config.php (ovviamente nascondendo eventuali password e simili) ?

magari hai messo questo array nel posto sbagliato …

clientScript è una delle voci dell’array “component”, (il quale è una chiave principale dell’array di configurazione)




return array(


        ...


	// application components

	'components'=>array(


             'clientScript' => array(

			'packages' => array(

				'jquery' => array(

           ..... 



Aggiungo che in fondo stiamo solo cercando di configurare packages, una proprietà di clientScript, e NON di modificare clientScript…

Vedi: http://www.yiiframework.com/doc/api/1.1/CClientScript#packages-detail

Hai ragione, lo avevo messo fuori dall’ array component: messo al posto

giusto ha funzionato subito, perlomeno su tutte le altre pagine dell’applicazione,

quelle sulle quali già prima jquery veniva caricato (ma col tuo metodo è meglio,

perchè posso caricare l’ ultima versione di jquery).

Invece sulla specifica pagina che mi dà il problema l’istruzione registerCoreScript,

pur essendo presente nella pagina,

continua a essere ignorata (non agisce e non dà errore). E’ una pagina aperta

da javascript e riempita via renderPartial e non via render: due cose che secondo

me non dovrebbero avere effetto…ma comincio a dubitarne…

grazie, intanto, e saluti

Verifica che il nome che usi dentro registerCoreScript sia esattamente (è case-sensitive) quello usato nella configurazione.

E’ normale che NON dia errori; non so perchè, ma è fatta apposta per non generare errori.

Se usi Firefox con Firebug o strumenti simili, verifica SE il file viene caricato (e verifica nel sorgente pagina che ci sia il tag <script src=…> per caricarlo.

Tieni conto però che se carichi una partial view via ajax, NON funziona li dentro il registerCoreScript.

La tecnica è avere una action che fa il render della view che fa da contenitore.

Dentro questa view fai il registercorescript.

Sempre dentro a questa via javascript gestisci il caricamento dinamico (via ajax si chiama un’altra action che fa un renderPartial).

A questo punto funziona sempre tutto.

Se hai degli eventi che devono essere agganciati ad oggetti caricati dinamicamente, dimmelo, che ti spiego con calma come registrare eventi ‘live’ con jQuery, se non sai farlo.

Grazie realtebo,

ho risolto. Il nocciolo della questione è quello che tu mi scrivi:

> Tieni conto però che se carichi una partial view via ajax, NON funziona li dentro il registerCoreScript.

L’ ho scoperto facendo delle prove, un attimo prima di leggere il tuo post.

Non l’ ho trovato evidenziato nella documentazione, mi sembra una lacuna da colmare.

Devo dire che mi hai fornito un’ assistenza di prima qualità. Questo forum è veramente

una risorsa fatastica!

grazie e saluti

Per la documentazione, in realtà non è necessario documentarla, credo, perchè è una questione tecnica e non un side-effect.

Non dipende infatto dal fatto dell’ajax in se, ma dal renderPartial, che, essendo un semplice ‘echo’ non decorato dall’html, NON viene, appunto, decorato neppure dei vari tag <script src=…> perchè questi trovano posto nell’header. Credo sia questa la motivazione di fondo.

Tieni sempre presente la differenza concettuale tra render e renderPartial, ti aiuterà a digerire situazioni di vario tipo, specie quando c’è di mezzo il javascript.

Grazie dei complimenti, vanno a tutti gli utenti di questo forum.

Ricordati di cliccare sul ‘+’ se la risposta ti è stata utile.

Al di là del gesto simbolico, serve a chi passa dal forum per capire se una risposta è valida o meno.

E vedrai cra pochi mesi, anche tu sarai qui a fare a gara ad aiutare chi scrive :) !