Adakah yang tahu cara membuat semua tag skrip JS Magento, mis., <script type="text/javascript" src="http://sitename.com/js/prototype/prototype.js"></script>
Render sebelum penutupan </body>
?
Saya sudah pernah mencoba ini sebelumnya, tetapi saya diberi kesalahan yang menurut saya sejalan dengan metode addJS yang tidak tersedia di mana saya menggunakannya, mungkin dalam referensi footer.
magento-1
performance
theme
layout
javascript
Mark Weston
sumber
sumber
Jawaban:
Itu tergantung permintaan Anda. Sebagai contoh, terakhir, saya telah menghapus semua skrip Prototipe dari
Homepage
toko Magento yang tidak saya hadapi masalah. Tapi seperti yang saya katakan, itu tergantung pada tema Anda, ekstensi dll.Untuk memindahkan skrip:
Temukan baris berikut dalam
page.xml
tema AndaDan masukkan yang berikut sebelum:
Untuk Magento 1.9 gunakan ini:
Buat file templat di app / design / frontend / [package] / [theme] /template/page/html/jsfooter.phtml dan masukkan yang berikut ini
Tambahkan di bawah ini di templat Anda tepat sebelum
</body>
tag penutup .sumber
core/text_list
punyaaddJs()
metode?Ada dua masalah dengan memindahkan tag. Masalah terbesar adalah bahwa untuk beberapa alasan Magento menyuntikkan banyak JS yang bergantung pada prototipe langsung ke
<body/>
tag. Memindahkan skrip ke akhir dokumen (walaupun bagus untuk memuat kali), akan memecah banyak halaman di Magento.Masalah lainnya sebenarnya melakukannya. Tampaknya tidak ada
<move />
tag, atau fungsi serupa. Apa yang saya lakukan untuk skrip khusus yang saya buat adalah menambahkan skrip seperti ini. Itu lebih berlebihan, tetapi berhasil:sumber
Dalam Magento 1.x ini adalah tugas orang bodoh. Ada terlalu banyak skrip inline yang berserakan di seluruh file templat di Magento yang akan pecah jika Anda memindahkan file inti JS dari
<head>
. Berpotensi di Magento 2, situasi ini akan berubah tetapi mengangkangi Prototipe dan jQuery ketika Magento bermigrasi menjauh dari Prototipe.Untuk skrip lain, Anda harus menempatkannya di depan
</body>
elemen. Saya merasa terbantu untuk mengabaikan Magento's<action method="addJS|addItem">
XML dan cukup membuat file templat baru untuk setiap skrip, yang menyertakan referensi skrip HTML sederhana seperti:Kemudian Anda dapat menyematkan file template ini di mana saja (dan masih menggunakan sebelum / sesudah untuk mengontrol pesanan) seperti:
sumber
Memindahkan JavaScript eksternal ke bawah tidak cukup dalam banyak kasus. Jika Anda menggunakan templat apa pun dengan JavaScript sebaris, seperti pada tema default, Anda perlu menunda eksekusi ini sampai semua dependensi (prototype.js, varien.js, ...) dimuat.
Pendekatannya adalah mengekstraksi semua
<script>
elemen sebaris dari blok yang diberikan menggunakan pengamat untukhttp_response_send_before
dan memindahkannya ke ujung tepat setelah skrip eksternal. Saat melakukannya, Anda dapat memindahkan semua elemen skrip, tidak hanya sebaris. Ini menghemat kerumitan Anda memindahkan mereka melalui model tata letak, yang jelas tidak dimaksudkan oleh Magento.Tom Robertshaw membuat ekstensi yang melakukan hal ini, dengan satu pengamat yang mengubah respons HTML menggunakan ekspresi reguler: https://github.com/bobbyshaw/magento-footer-js
Dia menggunakan
core_block_abstract_to_html_after
acara tetapi hanya mengambil tindakan jika blok saat ini adalah blok root. Ini berarti, pengamat dipanggil lebih sering, tetapi harus meningkatkan caching blok sampai batas tertentu.sumber
</body>
tag penutup .Saya sangat merekomendasikan modul halamanpeed mediarox untuk membantu Anda mengoptimalkan javascript (dan css) Anda dan meningkatkan peringkat wawasan halamanpeed google.
Ia bekerja dengan mem-parsing output html oleh Magento dan kemudian melakukan tindakan cut and paste pada kode untuk memindahkan javascript ke bagian bawah kode html. Prosesnya cepat tetapi paling baik digunakan bersamaan dengan cache halaman penuh untuk menyimpan perubahan html.
Informasi lebih lanjut tentang cara kerja modul ini dan dapat membantu Anda meningkatkan peringkat kecepatan halaman di sini:
http://blog.gaiterjones.com/magento-google-pagespeed-jscsshtmlminify-optimisation/
sumber
Untuk Magento v1.6 + (perlu menguji dalam versi yang lebih lama);
1 - buat file templat
page/html/footer/extras.phtml
dengan konten ini:2 - Tambahkan simpul html ini ke tata letak Anda xml:
3 - Itu dia!
sumber
Karena ada masalah dengan skrip lain ini (dalam produk / list.phtml)
<script type="text/javascript"> decorateList('category-list', 'none-recursive') </script>
saya harus memindahkan beberapa JS di akhir halaman saya.Saya tidak dapat membuat apa yang ditunjukkan di atas berfungsi, jadi saya menemukan cara lain untuk mencapai:
Saya menimpa
Mage/page/Block/Html/Footer.php controller
dengan membuatnya kembali dengan jalur yang sama diapp/local folder
.Inilah path lengkap yang harus dibuat jika tidak ada:
Dalam file ini, saya menambahkan fungsi dari Head.php yang dapat ditemukan di folder yang sama dengan inti Magento (mis. Mage / page / Block / Html / Head.php).
Fungsi yang Anda butuhkan untuk membuatnya bekerja adalah (jelas fungsi penuh, di sini saya hanya menunjukkan nama untuk tetap singkat):
Lalu saya tambahkan ke halaman kustom saya (yang ada di tema saya) / html / footer.phtml panggilan untuk ini:
Pada akhirnya, saya sekarang dapat menambahkan JS di footer saya dengan memanggilnya dalam tata letak apa pun oleh
sumber