Кто-нибудь знает, как сделать все теги JS-скриптов Magento, например, <script type="text/javascript" src="http://sitename.com/js/prototype/prototype.js"></script>
отрисовывать перед закрытием </body>
?
Я пробовал это однажды раньше, но мне выдали ошибку, которая, по-моему, была похожа на метод addJS, недоступный там, где я его использовал, возможно, в ссылочном нижнем колонтитуле.
magento-1
performance
theme
layout
javascript
Марк Уэстон
источник
источник
Ответы:
Это зависит от вашего запроса. Например, наконец, я удалил все скрипты Prototype из
Homepage
магазина Magento, с которыми у меня не возникло никаких проблем. Но, как я уже сказал, это зависит от вашей темы, расширений и т. Д.Для перемещения скрипта:
Найдите следующую строку в
page.xml
вашей темеИ вставьте следующее прямо перед:
Для Magento 1.9 используйте это:
Создайте файл шаблона в app / design / frontend / [package] / [theme] /template/page/html/jsfooter.phtml и поместите следующее
Добавьте ниже в свой шаблон непосредственно перед закрытием
</body>
тега.источник
core/text_list
естьaddJs()
метод?Есть две проблемы с перемещением тега. Самая большая проблема заключается в том, что по какой-то причине Magento вводит много JS, которое зависит от прототипа, прямо в
<body/>
тег. Перемещение сценариев в конец документа (хотя это хорошо для времени загрузки) разрушит многие страницы в Magento.Другая проблема на самом деле делает это. Кажется, нет
<move />
тега или подобной функциональности. То, что я сделал для пользовательских сценариев, которые я создал, это добавление таких сценариев. Это более избыточно, но работает:источник
В Magento 1.x это глупое поручение. В файлах шаблонов в Magento просто слишком много встроенных скриптов, которые могут сломаться, если вы переместили основные файлы JS из
<head>
. Потенциально в Magento 2 эта ситуация изменится, но она находится между Prototype и jQuery, когда Magento мигрирует из Prototype.Для других сценариев вы должны поместить их перед
</body>
элементом. Я считаю полезным игнорировать<action method="addJS|addItem">
XML Magento и просто создавать новый файл шаблона для каждого скрипта, который включает в себя простую ссылку на скрипт HTML, например:Затем вы можете встроить этот файл шаблона в любое место (и все еще использовать до / после для управления порядком) следующим образом:
источник
Перемещение внешнего JavaScript в низ недостаточно в большинстве случаев. Если вы используете какие-либо шаблоны со встроенным JavaScript, как в темах по умолчанию, вам нужно будет отложить их выполнение до тех пор, пока не будут загружены все зависимости (prototype.js, varien.js, ...).
Подход состоит в том, чтобы извлечь все встроенные
<script>
элементы из визуализированных блоков с помощью наблюдателяhttp_response_send_before
и переместить их в конец сразу после внешних сценариев. Пока вы это делаете, вы можете перемещать все элементы скрипта, не только встроенные. Это избавляет вас от необходимости перемещать их через макетную модель, которая явно не была предназначена Magento.Том Робертшоу создал расширение, которое делает именно это, с одним наблюдателем, который изменяет HTML-ответ с помощью регулярных выражений: https://github.com/bobbyshaw/magento-footer-js
Он использует
core_block_abstract_to_html_after
событие, но принимает меры только в том случае, если текущий блок является корневым блоком. Это означает, что наблюдатель вызывается чаще, но он должен в некоторой степени использовать блочное кэширование.источник
</body>
тегом.Я настоятельно рекомендую модуль mediarox pagespeed, чтобы помочь вам оптимизировать ваш javascript (и css) и улучшить рейтинг в Google Pagespeed.
Он работает путем анализа html-вывода Magento, а затем выполняет действие вырезания и вставки кода, чтобы переместить javascript в конец html-кода. Процесс быстрый, но лучше всего его использовать в сочетании с полным кэшем страниц для кэширования изменений HTML.
Более подробная информация о том, как работает этот модуль и может помочь вам повысить рейтинг страницы, здесь:
http://blog.gaiterjones.com/magento-google-pagespeed-jscsshtmlminify-optimisation/
источник
Для Magento v1.6 + (нужно тестировать в старых версиях);
1 - создать файл шаблона
page/html/footer/extras.phtml
с этим содержимым:2 - Добавьте этот HTML-узел в ваш макет XML:
3 - Вот и все!
источник
Из-за проблемы с этим другим сценарием (в product / list.phtml)
<script type="text/javascript"> decorateList('category-list', 'none-recursive') </script>
мне пришлось переместить несколько JS в конце моей страницы.Я не смог заставить работать то, что указано выше, поэтому я нашел другой способ добиться этого:
Я переопределяю
Mage/page/Block/Html/Footer.php controller
, воссоздав его с тем же путем вapp/local folder
.Вот полный путь, который будет создан, если не существует:
В этот файл я добавляю функции из Head.php, которые можно найти в той же папке ядра Magento (т.е. Mage / page / Block / Html / Head.php).
Функции, которые вам нужны, чтобы это работало (очевидно, полная функция, здесь я просто указываю имя, чтобы оставаться кратким):
Затем я добавляю на свою страницу (в моей теме) / html / footer.phtml вызов для этого:
В конце я теперь могу добавить JS в нижний колонтитул, вызывая его в любом макете
источник