Adicionando arquivo javascript no rodapé e estilos personalizados

9

Para carregamento rápido da página, preciso inserir JS no final da página a partir de componentes e módulos.

A maneira a seguir de declarar scripts não funciona para inseri-lo na parte inferior, porque não há parâmetro para colocá-lo no rodapé.

$rsws_document  = JFactory::getDocument(); 
$rsws_document->addScript();

Então, quais são as formas concisas de cumprir meu propósito? Se o joomla não fornece essa funcionalidade, é uma desvantagem significativa na velocidade de carregamento da página.

Também quero adicionar folhas de estilo personalizadas de um módulo para que elas sejam injetadas na página apenas uma vez, mesmo que o mesmo módulo a adicione várias vezes nessa página -

<style type="text/css"> .classname { color:red; }.....</style>

Como posso conseguir isso?

dev-m
fonte
11
Você deve manter sua pergunta em um tópico. Você tem duas perguntas aqui.
Bakual
11
existe uma extensão que pode ajudar: extensions.joomla.org/extension/scriptsdown
noiragneau

Respostas:

6

JDocument-> addScript () tem opções para adiar o carregamento do script e / ou carregá-lo de forma assíncrona. Consulte o documento da API: http://api.joomla.org/cms-3/classes/JDocumentHTML.html#method_addScript

Isso permitirá que o navegador carregue os scripts posteriormente no processo, o que ajudará no tempo de carregamento da página.

Não há API para carregar os scripts na parte inferior da página. Se você precisar, use extensões de terceiros ou adicione-as diretamente ao modelo.

Bakual
fonte
Sim, eu estava ciente disso. Mas o wordpress tem esse tipo de recurso referente às minhas perguntas no caso de scripts e cs personalizados. Portanto, o Joomla deve adicioná-lo.
Dev-m
Houve discussões para adicionar algo assim. Pessoalmente, não vejo a vantagem de adicioná-lo na parte inferior ao adiamento / assíncrono.
Bakual
2

Até agora, acho que não há opção para carregar scripts na parte inferior da página.

Para sua segunda pergunta, você pode usar uma propriedade boolean estática e configurá-la como true na primeira vez que seu css for renderizado. Para as seguintes instâncias do módulo, basta testar esta propriedade para decidir se você precisa adicionar seu css ou não.

Talvez um bom lugar para adicionar essa propriedade estática seja uma classe auxiliar de módulo.

Saudações,

Pep Lainez
fonte
2

$ document-> addScript () sempre adiciona scripts na seção de cabeçalho antes da tag. Portanto, se você deseja carregar um arquivo de script na parte inferior da página, precisará incluir os js nesse arquivo simplesmente usando<script src="{pathtojacvascriptfile}"></script>

Espero que isso possa ajudar


fonte
2

No momento, não há um método para adicionar um script ao rodapé. No entanto, você pode criar um plug-in que obtenha a saída, procure por uma tag com nome apropriado, como rodapé e use str_replace para adicionar seu código.

Mas você pode usar essas extensões para conseguir isso:

  1. ScriptsDown
  2. JCH Optimize

Também encontrei um método. Prefiro não invadir o código principal, mas é o melhor que posso encontrar no momento.

verifique este link - os arquivos Javascript estão incluídos no rodapé

Espero que ajude os outros :)

Joomler
fonte
2

Utilizamos um módulo chamado "Blank Module", que permite colocar qualquer script (PHP, Java, CSS, HTML, o que for) e escolher onde carregá-lo (cabeça, corpo, fim do corpo, etc.).

É grátis e achei totalmente útil: http://extensions.joomla.org/extensions/core-enhancements/coding-a-scripts-integration/custom-code-in-modules/3668

Para mover scripts do para abaixo do corpo, é um pouco mais trabalhoso. Usa isto:

Incluir no modelo:

<? php
$ head = $ doc-> getHeadData ();
// Remover scripts
unset ($ doc -> _ scripts [JURI :: root (true). '/media/system/js/mootools-more.js']);
?>

Adicione uma linha "não configurada" para cada script que você precisa remover do cabeçalho. Em seguida, adicione-o ao módulo em branco carregando na parte inferior (posição de depuração?). Uma vantagem: se você criar diferentes módulos em branco, poderá carregar apenas scripts quando necessário (como uma instância de módulo apenas para motools, carregando somente em uma página específica).

Para estilos, você também pode usar o Módulo em branco.

Eu espero que isso ajude.

Jonathan Roza - Zott Online Ag
fonte
0

Ainda não tentei sozinho. Você pode criar um módulo que não exibe HTML, apenas imprime scripts e estilos, mas na posição inferior do módulo nas páginas em que seu outro módulo é exibido.

Hung Tran
fonte