Google CDN jQuery con Fallback locale in XML layout Magento


18

Ho fatto quanto segue per includere jQuery da Google CDN in Magento:

<default>
    <reference name="head">
        <block type="core/text" name="google.cdn.jquery">
            <action method="setText">
                <text><![CDATA[<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script><script type="text/javascript">jQuery.noConflict();</script>]]>
                </text>
            </action>
        </block>
    </reference>
</default>

Tuttavia, quando voglio implementarlo con un fallback locale, che funziona abbastanza bene, finisco per aggiungerlo al mio .phtml come tale:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
if (!window.jQuery) {
    document.write('<script src="/path/to/your/jquery"><\/script>');
}
</script>
  • Esiste un modo più elegante per farlo in local.xml che inserire il fallback nel <text>nodo come sto facendo jQuery.noConflict?

Modificare:

Per attirare l'attenzione sull'altra parte della domanda: ci sono moduli della community che includono jQuery per te? Se hanno un jQuery locale, va bene - se usano Google CDN - ancora meglio. Se questo non è là fuori, mi piacerebbe crearne uno.

  • Esistono estensioni di go-to che gestiscono ciò senza che io debba avviarlo da solo?

1
Un modulo comunità molto semplice per includere JQuery (semi-self-link): github.com/netz98/N98_BaseJQuery - include solo un JQuery locale. L'idea tramite CDN è piacevole, sentiti libero di migliorare tramite le richieste pull :-)
— Alex

Per curiosità: la CDN non è affidabile o perché è necessario il fallback? Che tipo di esperienza pratica hai lì?
— Alex

2
Alcuni paesi (Iran, Siria, ecc.) Possono, a volte, bloccare Google e Google CDN. Questa è la mia esperienza personale. Ho anche visto cose come i timeout di risposta che questo mitiga.
— Filwinkle

Capire. Quindi sarebbe bello se puoi contribuire con una soluzione al modulo.
— Alex

Grande scoperta: non ho visto il modulo N98 quando cercavo qualcosa di adatto. Penso che contribuirò laggiù. Grazie! Tuttavia, potrebbe essere necessario utilizzare il <text>metodo descritto sopra ... non sono sicuro che si tratti di una soluzione accettabile. Il modulo n98 usa un file js include separato per chiamare noConflict, però, suppongo ...
— Philwinkle

Risposte:


18

Alla fine della giornata, è preferibile farlo tramite Layout XML. Ho scoperto che l'opzione di fallback locale è meglio implementata in una dichiarazione a riga singola minimizzata con il Google Closure Compiler.

<default>
    <reference name="head">
        <block type="core/text" name="google.cdn.jquery">
            <action method="setText">
                <text><![CDATA[<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script><script>window.jQuery||document.write('<script src="/path/to/your/jquery.js">\x3c/script>');</script><script>jQuery.noConflict();</script>]]></text>
            </action>
        </block>
    </reference>
</default>

questo non funziona
— fmsthird

2

Ho cercato a lungo il codice dei file head.phtml e dei file e dei blocchi, ma non c'è modo di cambiare i template per iniettare il codice in <head>.

Sono un idiota, hai già scritto tutto e ho supervisionato un paio di volte <?php echo $this->getChildHtml() ?>in head.phtml: - /

Quindi userei solo un core/templateblocco e un modello per questo. È facile da leggere, da capire e da gestire.


Il problema che sto cercando di superare è la possibilità di aggiungere / rimuovere questo blocco da determinati tipi di pagina e layout a piacimento senza dover includere forzatamente il phtml ogni volta. In questo momento è sufficiente un blocco statico, ma solo perché è disponibile dalla maggior parte ovunque ...
— Philwinkle

Non vedo il problema qui. Lo aggiungi a <default> e lo rimuovi, ovunque dove non vuoi averlo, come ogni altro blocco. Puoi pensare di aggiungere un core/text_liste aggiungere lì tutto ciò che vuoi (se è più di un file) per rimuoverlo più facilmente su altre pagine.
— Fabian Blechschmidt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.