Qual é a diferença entre JHtml: script () e $ doc-> addScript?


10

Desenvolvi recentemente um módulo que exigia a injeção de certos arquivos JS e CSS no <head>de cada página. Inicialmente, usei:

$doc =& JFactory::getDocument();
$doc->addScript(JURI::base(true).'/modules/mod_x/js/mod_x.js');

No entanto, notei que, quando o armazenamento em cache estava ativado, o site carregava uma versão em cache e uma versão /cacheem cache /modules/mod_x/js/, causando erros de JS.

Quando mudei isso para:

JHtml::script(Juri::base().'modules/mod_x/js/mod_x.js');

O script foi carregado apenas uma vez, do cache, resolvendo esses erros.

Eu li nos documentos que o addScriptmétodo era mais 'baixo nível' do que o JHtml:scriptmétodo, mas além de dizer que ...

Obviamente, você também precisará codificar manualmente algumas das etapas [que JHtml: script faz por você] que seriam executadas automaticamente usando o [método JHtml: script] acima [se você usar o addScript].

... nenhum detalhe adicional é fornecido.

Então qual a diferença? Suponho que JHtml:scripteventualmente chame addScriptum objeto de documento em algum momento, mas outras etapas intermediárias são executadas primeiro?


4
Eu reescrevi os documentos do joomla um pouco para tentar atualizá-lo - veja se faz mais sentido agora?
George Wilson

1
@GeorgeWilson Os documentos do Joomla realmente melhoraram recentemente. Obrigado :)
TryHarder

Pergunta relacionada sobre folhas de estilo: joomla.stackexchange.com/q/10062/5239
Flimm

Respostas:


8

JHtml::scriptpossui lógica adicional incluída. Consulte http://api.joomla.org/cms-3/classes/JHtml.html#method_script para obter a referência da API

Por padrão, ele detecta a configuração de depuração e o navegador usado e carrega o script correspondente. Por exemplo, quando a depuração estiver ativada, será carregada uma versão não compactada do arquivo, se presente.

Existem configurações opcionais que permitem substituir o arquivo no nível do modelo e outras coisas.

Michael Babker escreveu um bom guia de como usar JHtml::script()para permitir substituições: http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable-media

Função no repositório para referência: https://github.com/joomla/joomla-cms/blob/staging/libraries/cms/html/html.php#L659

Página oficial do documento que agora é atualizada por George: http://docs.joomla.org/J3.3:Adding_JavaScript_and_CSS_to_the_page


2
obrigado pela resposta. A referência da API é bastante concisa - existe uma explicação mais abrangente dos efeitos do detect_browser e do detect_debug e, quando você diz 'configurações opcionais' e 'outras coisas', elas estão documentadas em algum lugar?
codinghands

Adicionei um link para um artigo de Michael que explica a parte de substituição. Quanto à parte de depuração e navegador, não acho que exista uma documentação. Você precisaria ler o código para isso.
Bakual

1
Portanto, se houver um arquivo js descompactado e compactado, por exemplo, e a depuração estiver ativada, ele carregará o filename-uncompressed.js e apenas o filename.js quando a depuração estiver desativada. Para o navegador quando debug off ele procura filename-browser.js então filename-browser-browserversion.js etc.
George Wilson

2
Esta é uma resposta definitiva - obrigado @Bakual e @GeorgeWilson!
Codinghands

1
Não esqueça que o JHtml também pode anexar a MD5sum de um script ou folha de estilo ao cache-bust.
Flimm

4

em duas palavras:

  • JHtml::script() - permite substituir o script específico (exceto o que já está anexado ao JDocument), depende de alguns fatores (consulte a resposta do @Bakual);
  • $doc->addScript() - anexar script diretamente ao documento, sem verificar uma substituição;

Se você é o desenvolvedor da extensão, use altamente recomendado JHtml::script()ao adicionar o script. Isso permitirá que seus usuários substituam alguns scripts específicos, dependendo do que eles desejam.
Também existe um método semelhante para css.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.