¿Alguien sabe cómo tener todas las etiquetas de script JS de Magento, por ejemplo, <script type="text/javascript" src="http://sitename.com/js/prototype/prototype.js"></script>
renderizar antes del cierre </body>
?
He intentado esto una vez antes, pero recibí un error que creo que estaba en la línea del método addJS que no estaba disponible donde lo usé, posiblemente en el pie de página de referencia.
magento-1
performance
theme
layout
javascript
Mark Weston
fuente
fuente
Respuestas:
Depende de su solicitud. Por ejemplo, por último, me habían eliminado todos los scripts de Prototype
Homepage
de la tienda de Magento, lo que no tuve ningún problema. Pero como dije, depende de tu tema, extensiones, etc.Para mover el guión:
Encuentra la siguiente línea
page.xml
de tu temaE inserte lo siguiente justo antes:
Para Magento 1.9 use esto:
Cree el archivo de plantilla en app / design / frontend / [package] / [theme] /template/page/html/jsfooter.phtml y coloque lo siguiente
Agregue a continuación en su plantilla justo antes de cerrar la
</body>
etiqueta.fuente
core/text_list
tiene unaddJs()
método?Hay dos problemas al mover la etiqueta. El mayor problema es que, por alguna razón, Magento inyecta mucho JS que depende del prototipo directamente en la
<body/>
etiqueta. Mover los scripts al final del documento (aunque es bueno para los tiempos de carga), romperá muchas de las páginas en Magento.El otro problema es hacerlo realmente. Parece que no hay
<move />
etiqueta o funcionalidad similar. Lo que he hecho para los scripts personalizados que he creado es agregar scripts como este. Es más redundante, pero funciona:fuente
En Magento 1.x esta es una tarea de tontos. Simplemente hay demasiados scripts en línea esparcidos a través de los archivos de plantilla en Magento que se romperán si reubica los archivos JS principales de
<head>
. Potencialmente en Magento 2, esta situación cambiará, pero se extiende entre Prototype y jQuery a medida que Magento se aleja de Prototype.Para otros scripts, debe colocarlos antes del
</body>
elemento. Me pareció útil ignorar el<action method="addJS|addItem">
XML de Magento y simplemente crear un nuevo archivo de plantilla para cada script, que incluye una referencia de script HTML simple como:Luego puede incrustar este archivo de plantilla en cualquier lugar (y aún usarlo antes / después para controlar el orden) de esta manera:
fuente
Mover JavaScript externo al final no es suficiente en la mayoría de los casos. Si utiliza alguna plantilla con JavaScript en línea, como en los temas predeterminados, deberá retrasar la ejecución de estos hasta que se carguen todas las dependencias (prototype.js, varien.js, ...).
Un enfoque consiste en extraer todos los
<script>
elementos en línea de los bloques renderizados utilizando un observadorhttp_response_send_before
y moverlos hasta el final justo después de los guiones externos. Mientras lo hace, puede mover todos los elementos del script, no solo en línea. Esto le ahorra la molestia de moverlos a través del modelo de diseño, que claramente no fue diseñado por Magento.Tom Robertshaw creó una extensión que hace exactamente esto, con un solo observador que cambia la respuesta HTML utilizando expresiones regulares: https://github.com/bobbyshaw/magento-footer-js
Utiliza el
core_block_abstract_to_html_after
evento pero solo toma medidas si el bloque actual es el bloque raíz. Esto significa que se llama al observador con más frecuencia, pero debería aprovechar el almacenamiento en caché de bloque hasta cierto punto.fuente
</body>
etiqueta de cierre .Recomiendo encarecidamente el módulo de velocidad de páginas mediarox para ayudarlo a optimizar su javascript (y css) y mejorar el ranking de información de velocidad de páginas de google.
Funciona analizando la salida html de Magento y luego realizando una acción de cortar y pegar en el código para mover javascript al final del código html. El proceso es rápido, pero se usa mejor junto con una caché de página completa para almacenar en caché los cambios html.
Más información sobre cómo funciona este módulo y puede ayudarlo a mejorar el rango de velocidad de página aquí:
http://blog.gaiterjones.com/magento-google-pagespeed-jscsshtmlminify-optimisation/
fuente
Para Magento v1.6 + (necesita probar en versiones anteriores);
1 - crea un archivo de plantilla
page/html/footer/extras.phtml
con este contenido:2 - Agregue este nodo html a su diseño xml:
3 - ¡Eso es!
fuente
Debido a un problema con este otro script (en product / list.phtml)
<script type="text/javascript"> decorateList('category-list', 'none-recursive') </script>
tuve que mover algunos JS al final de mi página.No pude hacer que lo que se indica arriba funcione así que encuentro otra forma de lograrlo:
Anulo el
Mage/page/Block/Html/Footer.php controller
recreándolo con la misma ruta enapp/local folder
.Aquí está la ruta completa que se creará si no existe:
En este archivo, agrego funciones de Head.php que se pueden encontrar en la misma carpeta del núcleo de Magento (es decir, Mage / page / Block / Html / Head.php).
Las funciones que necesita para que funcione son (obviamente, la función completa, aquí solo indico el nombre para permanecer conciso):
Luego agrego a mi página personalizada (la de mi tema) / html / footer.phtml la llamada para esto:
Al final, ahora puedo agregar JS en mi pie de página al llamarlo en cualquier diseño
fuente