it-swarm-eu.dev

alternativa a window.addEvent ('domready', ...)

Uso una versione adattata di prettify del codice google sulla mia pagina che mi permette di evidenziare il codice Mathematica . Per la corretta iniezione del codice js necessario, il plug-in JPrettify è abbastanza utile. Poiché questo plug-in sembra non essere più ufficialmente disponibile e poiché devo modificarlo comunque, ho impostato la mia versione su GitHub .

Ieri, ero indicando il fatto che non funziona in Joomla 3 e dopo un po 'di debug abbiamo scoperto che la funzione PrettyPrint non viene chiamata quando viene inserita come segue in la testa html:

window.addEvent('domready', function() { prettyPrint();});

Questo è il modo in cui JPrettify (linea 53) lo fa. Dopo aver cercato su Google, il problema è che la libreria mootools . Abbiamo risolto il problema inserendo staticamente

<body onload="PrettyPrint()">

nel file php modello principale, che ovviamente non è la strada giusta da percorrere.

Domanda: Per far funzionare il plugin attraverso diverse versioni di Joomla, qual è il metodo migliore per chiamare PrettyPrint()?

6
halirutan

Invece di eseguire il caricamento del corpo, dovrebbe funzionare quanto segue:

$(document).ready(function() {
    PrettyPrint();
});

O preferiresti usare Javascript per determinare quando viene chiamata la funzione, potresti usare:

window.onload = function() {
    PrettyPrint();
};
2
Lodder

C'è un lavoro in corso in Joomla 3 per rimuovere gli script basati su Mootools e sostituirli con quelli jQuery. Il problema principale per cui il tuo codice fallisce è che non carichi Mootools da solo. Nelle versioni precedenti di Joomla, potrebbe essere stato caricato dal layout principale o da un modulo, e ora non è più caricato perché gli script non ne hanno più bisogno.

Quindi, se ti serve per il tuo modulo, caricalo usando JHtmlBehavior::famework() ( http://api.joomla.org/cms-3/classes/JHtmlBehavior.html#method_framework ).

Lo stesso vale se si riscrive lo script per usare jQuery. Non contare che venga caricato, di 'a Joomla che ne hai bisogno. Joomla farà in modo che venga caricato solo una volta. Per caricare jQuery, dovresti usare JHtmlJquery::framework() ( http://api.joomla.org/cms-3/classes/JHtmlJquery.html#method_framework ).

2
Bakual