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.