Est-ce que quelqu'un sait comment faire en sorte que toutes les balises de script JS de Magento, par exemple, soient rendues <script type="text/javascript" src="http://sitename.com/js/prototype/prototype.js"></script>
avant la fermeture </body>
?
J'ai déjà essayé cela une fois auparavant, mais une erreur m'a été signalée qui, selon moi, correspond au fait que la méthode addJS n'est pas disponible là où je l'ai utilisée, éventuellement dans le pied de page de référence.
magento-1
performance
theme
layout
javascript
Mark Weston
la source
la source
Réponses:
Cela dépend de votre demande. Par exemple, enfin, tous les scripts Prototype
Homepage
de la boutique Magento avaient été supprimés et je n’avais rencontré aucun problème. Mais comme je l'ai dit, cela dépend de votre thème, des extensions, etc.Pour déplacer le script:
Trouvez la ligne suivante dans
page.xml
votre thèmeEt insérez le texte suivant juste avant:
Pour Magento 1.9, utilisez ceci:
Créez le fichier de modèle dans app / design / frontend / [package] / [thème] /template/page/html/jsfooter.phtml et mettez ce qui suit
Ajoutez ci-dessous dans votre modèle juste avant la fermeture de la
</body>
balise.la source
core/text_list
avoir uneaddJs()
méthode?Le déplacement de la balise pose deux problèmes. Le plus gros problème est que, pour une raison quelconque, Magento injecte beaucoup de JS dépendant du prototype directement dans la
<body/>
balise. Déplacer les scripts à la fin du document (bien que ce soit bon pour les temps de chargement), casserait beaucoup de pages dans Magento.L'autre problème est en train de le faire. Il ne semble pas y avoir de
<move />
balise, ou une fonctionnalité similaire. Ce que j'ai fait pour les scripts personnalisés que j'ai créés, c'est en ajoutant des scripts comme celui-ci. C'est plus redondant, mais ça marche:la source
Dans Magento 1.x, c'est une course de fou. Il y a tout simplement trop de scripts en ligne encombrés dans les modèles de fichiers dans Magento qui risquent de ne plus fonctionner correctement si vous déplaciez les fichiers JS principaux à partir du
<head>
. Potentiellement dans Magento 2, cette situation va changer, mais elle est à cheval entre Prototype et jQuery alors que Magento migre de Prototype.Pour les autres scripts, vous devez les placer avant l'
</body>
élément. J'ai trouvé utile d'ignorer le code<action method="addJS|addItem">
XML de Magento et de créer simplement un nouveau fichier de modèle pour chaque script, qui inclut une référence de script HTML simple, telle que:Ensuite, vous pouvez incorporer ce fichier de modèle n'importe où (et toujours utiliser avant / après pour contrôler l'ordre) comme ceci:
la source
Déplacer JavaScript externe vers le bas ne suffit pas dans la plupart des cas. Si vous utilisez des modèles avec du JavaScript intégré, comme dans les thèmes par défaut, vous devrez différer leur exécution jusqu'à ce que toutes les dépendances (prototype.js, varien.js, ...) soient chargées.
Une approche consiste à extraire tous les
<script>
éléments en ligne des blocs rendus à l'aide d'un observateurhttp_response_send_before
et à les déplacer à la fin, juste après les scripts externes. Tant que vous y êtes, vous pouvez déplacer tous les éléments de script, pas seulement en ligne. Cela vous évite d'avoir à les déplacer via le modèle de présentation, ce qui n'était clairement pas l'intention de Magento.Tom Robertshaw a créé une extension qui fait exactement cela, avec un seul observateur qui modifie la réponse HTML en utilisant des expressions régulières: https://github.com/bobbyshaw/magento-footer-js
Il utilise l'
core_block_abstract_to_html_after
événement mais n'agit que si le bloc actuel est le bloc racine. Cela signifie que l’observateur est appelé plus souvent, mais il doit exploiter dans une certaine mesure la mise en cache des blocs.la source
</body>
balise de fermeture .Je recommande vivement le module pagespeed de mediarox pour vous aider à optimiser votre javascript (et css) et à améliorer le classement de Google pagespeed insight.
Cela fonctionne en analysant la sortie html de Magento, puis en effectuant une action copier / coller sur le code pour déplacer javascript au bas du code html. Le processus est rapide, mais il est préférable de l'utiliser conjointement avec un cache de page complet pour mettre en cache les modifications HTML.
Plus d'informations sur le fonctionnement de ce module et peuvent vous aider à améliorer le classement par vitesse de page ici:
http://blog.gaiterjones.com/magento-google-pagespeed-jscsshtmlminify-optimisation/
la source
Pour Magento v1.6 + (nécessité de tester dans des versions plus anciennes);
1 - créer un fichier modèle
page/html/footer/extras.phtml
avec ce contenu:2 - Ajoutez ce noeud html à votre layout xml:
3 - C'est ça!
la source
En raison d'un problème avec cet autre script (dans product / list.phtml),
<script type="text/javascript"> decorateList('category-list', 'none-recursive') </script>
j'ai dû déplacer un fichier JS à la fin de ma page.Je n'ai pas réussi à faire fonctionner ce qui est indiqué ci-dessus, alors j'ai trouvé un autre moyen de réaliser:
Je remplace le
Mage/page/Block/Html/Footer.php controller
en le recréant avec le même chemin dansapp/local folder
.Voici le chemin complet à créer s'il n'existe pas:
Dans ce fichier, j'ajoute des fonctions de Head.php qui se trouvent dans le même dossier que le noyau de Magento (par exemple, Mage / page / Block / Html / Head.php).
Les fonctions dont vous avez besoin pour que cela fonctionne sont (évidemment la fonction complète, ici je viens d'indiquer le nom pour rester concis):
Ensuite, j'ajoute à ma page (html / footer.phtml) personnalisée (celle de mon thème):
À la fin, je peux maintenant ajouter JS dans mon pied de page en l’appelant dans n’importe quelle mise en page.
la source