ti-enxame.com

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

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 cache estava ativado, o site carregava uma versão em cache de /cache e versão não armazenada em cache de /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.

I leia os documentos que o método addScript era mais 'baixo nível' do que o JHtml:script método, mas além de dizer que ...

Obviamente, você também precisará codificar manualmente algumas das etapas [que o 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? Eu assumo JHtml:script eventualmente chama addScript em um objeto de documento em algum momento, mas outras etapas intermediárias são executadas primeiro?

10
codinghands

JHtml::script Possui 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 detectará a configuração de depuração e o navegador usado e carregará 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 sobre como usar JHtml::script() para permitir substituições: http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable- mídia

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

8
Bakual

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() - anexa script diretamente ao documento, sem verificar uma substituição;

Se você é o desenvolvedor da extensão, é altamente recomendável usar 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.

4
Fedik