Alguém sabe como ter todas as tags de script JS do Magento, por exemplo, <script type="text/javascript" src="http://sitename.com/js/prototype/prototype.js"></script>
renderizadas antes do fechamento </body>
?
Eu tentei isso uma vez antes, mas recebi um erro que, segundo as linhas do método addJS, não estava disponível onde eu o usei, possivelmente no rodapé de referência.
magento-1
performance
theme
layout
javascript
Mark Weston
fonte
fonte
Respostas:
Depende do seu pedido. Por exemplo, por último, eu havia removido todos os scripts Prototype da
Homepage
loja Magento e não encontrei nenhum problema. Mas como eu disse, isso depende do seu tema, extensões etc.Para mover o script:
Encontre a seguinte linha no
page.xml
seu temaE insira o seguinte antes:
Para Magento 1.9 use isto:
Crie o arquivo de modelo em app / design / frontend / [package] / [theme] /template/page/html/jsfooter.phtml e coloque o seguinte
Adicione abaixo no seu modelo antes de fechar a
</body>
tag.fonte
core/text_list
tem certeza que tem umaddJs()
método?Existem dois problemas ao mover a tag. O maior problema é que, por algum motivo, o Magento injeta muitas JS que dependem do protótipo diretamente na
<body/>
tag. Mover os scripts para o final do documento (embora seja bom para os tempos de carregamento), quebrará muitas páginas no Magento.O outro problema é realmente fazê-lo. Parece não haver
<move />
tag ou funcionalidade semelhante. O que fiz para scripts personalizados que criei é adicionar scripts como este. É mais redundante, mas funciona:fonte
No Magento 1.x, essa é uma tarefa tola. Existem simplesmente muitos scripts embutidos espalhados pelos arquivos de modelo no Magento que serão quebrados se você realocar os arquivos JS principais do diretório
<head>
. Potencialmente no Magento 2, essa situação mudará, mas está abrangendo Prototype e jQuery à medida que o Magento migra para longe do Prototype.Para outros scripts, você deve colocá-los antes do
</body>
elemento. Eu achei útil ignorar o<action method="addJS|addItem">
XML do Magento e simplesmente criar um novo arquivo de modelo para cada script, que inclui uma referência simples de script HTML como:Em seguida, você pode incorporar esse arquivo de modelo em qualquer lugar (e ainda usar antes / depois para controlar o pedido) da seguinte maneira:
fonte
Mover JavaScript externo para o final não é suficiente na maioria dos casos. Se você usar algum modelo com JavaScript embutido, como nos temas padrão, precisará adiar a execução deles até que todas as dependências (prototype.js, varien.js, ...) sejam carregadas.
Uma abordagem é extrair todos os
<script>
elementos embutidos dos blocos renderizados usando um observador parahttp_response_send_before
e movê-los para o final logo após os scripts externos. Enquanto você está nisso, você pode mover todos os elementos de script, não apenas inline. Isso evita o trabalho de movê-los através do modelo de layout, que claramente não foi planejado pelo Magento.Tom Robertshaw criou uma extensão que faz exatamente isso, com um único observador que altera a resposta HTML usando expressões regulares: https://github.com/bobbyshaw/magento-footer-js
Ele usa o
core_block_abstract_to_html_after
evento, mas só executa uma ação se o bloco atual for o bloco raiz. Isso significa que o observador é chamado com mais frequência, mas deve alavancar o cache do bloco até certo ponto.fonte
</body>
tag de fechamento .Eu recomendo o módulo mediarox pagespeed para ajudar você a otimizar seu javascript (e css) e melhorar a classificação de insight do google pagespeed.
Ele funciona analisando a saída html do Magento e, em seguida, executando uma ação de recortar e colar no código para mover o javascript para a parte inferior do código html. O processo é rápido, mas é melhor usado em conjunto com um cache de página inteira para armazenar em cache as alterações html.
Mais informações sobre como este módulo funciona e podem ajudá-lo a melhorar a classificação da velocidade da página aqui:
http://blog.gaiterjones.com/magento-google-pagespeed-jscsshtmlminify-optimisation/
fonte
Para Magento v1.6 + (necessidade de testar em versões mais antigas);
1 - crie um arquivo de modelo
page/html/footer/extras.phtml
com este conteúdo:2 - Adicione este nó html ao seu xml de layout:
3 - É isso aí!
fonte
Devido a um problema com este outro script (em product / list.phtml)
<script type="text/javascript"> decorateList('category-list', 'none-recursive') </script>
, tive que mover algumas JS no final da minha página.Não consegui fazer com que o que foi indicado acima funcione, então encontro outra maneira de alcançar:
Eu substituo o
Mage/page/Block/Html/Footer.php controller
recriando-o com o mesmo caminhoapp/local folder
.Aqui está o caminho completo a ser criado, se não existir:
Neste arquivo, adiciono funções do Head.php, que podem ser encontradas na mesma pasta do núcleo do Magento (por exemplo, Mage / page / Block / Html / Head.php).
As funções que você precisa para fazer funcionar são (obviamente, a função completa, aqui apenas indico o nome para permanecer conciso):
Em seguida, adiciono à minha página personalizada (a do meu tema) / html / footer.phtml a chamada para isso:
No final, agora posso adicionar JS no rodapé chamando-o em qualquer layout,
fonte