ti-enxame.com

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

Eu uso uma versão adaptada do código do Google prettify na minha página, o que me permite destacar o código Mathematica . Para a injeção correta do código js necessário, o plug-in JPrettify é bastante útil. Como esse plugin parece não estar mais disponível oficialmente e como eu preciso ajustá-lo, configurei minha própria versão em GitHub .

Ontem, eu estava apontado para o fato que ele não funciona no Joomla 3 e, após algumas depurações, descobrimos que a função PrettyPrint não é chamada quando é inserida da seguinte maneira em a cabeça html:

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

É assim que o JPrettify (linha 53) faz. Depois de pesquisar no Google, o problema é a biblioteca mootools . Resolvemos o problema inserindo estaticamente

<body onload="PrettyPrint()">

no arquivo php principal do template, que obviamente não é o caminho certo a seguir.

Pergunta: Para fazer o plugin funcionar em diferentes versões do Joomla, qual é o melhor método para chamar PrettyPrint()?

6
halirutan

Em vez de sobrecarregar o corpo, o seguinte deve funcionar:

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

Ou você prefere usar Javascript para determinar quando a função é chamada, você pode usar:

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

Há um trabalho em andamento no Joomla 3 para remover scripts baseados no Mootools e substituí-los pelos do jQuery. O principal problema por que seu código falha é que você não carrega o Mootools. Nas versões anteriores do Joomla, ele pode ter sido carregado pelo layout principal ou por um módulo, e agora não é mais carregado porque os scripts não precisam mais dele.

Portanto, se você precisar dele para o seu módulo, carregue-o usando JHtmlBehavior::famework() ( http://api.joomla.org/cms-3/classes/JHtmlBehavior.html#method_framework ).

O mesmo se aplica se você reescrever seu script para usar o jQuery. Não conte com o carregamento, informe ao Joomla que você precisa. O Joomla cuidará para que ele seja carregado apenas uma vez. Para carregar o jQuery, você usaria JHtmlJquery::framework() ( http://api.joomla.org/cms-3/classes/JHtmlJquery.html#method_framework ).

2
Bakual