誰もが知っているがどのようにMagentoののJSスクリプトタグなどのすべてを持っているん<script type="text/javascript" src="http://sitename.com/js/prototype/prototype.js"></script>
クロージング前にレンダリング</body>
?
私はこれを以前に一度試しましたが、おそらく参照フッターで使用したaddJSメソッドの行に沿ってエラーが発生したと思います。
誰もが知っているがどのようにMagentoののJSスクリプトタグなどのすべてを持っているん<script type="text/javascript" src="http://sitename.com/js/prototype/prototype.js"></script>
クロージング前にレンダリング</body>
?
私はこれを以前に一度試しましたが、おそらく参照フッターで使用したaddJSメソッドの行に沿ってエラーが発生したと思います。
回答:
それはあなたの要求次第です。たとえば、最後Homepage
に、MagentoストアからPrototypeスクリプトをすべて削除しましたが、問題はありませんでした。しかし、私が言ったように、それはあなたのテーマ、拡張機能などに依存します
スクリプトを移動するには:
page.xml
テーマの次の行を見つけます
<block type="core/text_list" name="before_body_end" as="before_body_end" translate="label">
そして、直前に以下を挿入します:
<block type="page/html_head" name="jsfooter" as="jsfooter" template="page/html/jsfooter.phtml">
<action method="addJs"><script>your_script.js</script></action>
</block>
Magento 1.9の場合、これを使用します。
<block type="page/html_head" name="jsfooter" as="jsfooter" template="page/html/jsfooter.phtml">
<action method="addItem"><type>skin_js</type><name>js/yourskinfile.js</name><params/></action>
</block>
app / design / frontend / [package] / [theme] /template/page/html/jsfooter.phtmlにテンプレートファイルを作成し、以下を配置します
<?php echo $this->getCssJsHtml() ?>
</body>
タグを閉じる直前にテンプレートに以下を追加します。
<?php echo $this->getChildHtml('jsfooter') ?>
core/text_list
持っているaddJs()
方法を?
タグの移動には2つの問題があります。最大の問題は、何らかの理由でMagentoがプロトタイプに依存する多くのJSを<body/>
タグに直接注入することです。スクリプトをドキュメントの最後に移動すると(ロード時間には適していますが)、Magentoの多くのページが破損します。
他の問題は実際にそれをしていることです。<move />
タグなどの機能はないようです。作成したカスタムスクリプトに対して行ったことは、このようなスクリプトを追加することです。より冗長ですが、動作します:
<block type="page/html_head" name="foot.scripts" template="page/template/foot-scripts.phtml">
<action method="addJs"><script>jmax/global-min.js</script></action>
</block>
Magento 1.xでは、これはばかげたことです。Magentoのテンプレートファイル全体に散らばっているインラインスクリプトが多すぎて、.jsからコアJSファイルを再配置すると壊れます<head>
。Magento 2でこの状況は変わる可能性がありますが、MagentoがPrototypeから移行するにつれてPrototypeとjQueryにまたがっています。
他のスクリプトの場合は、</body>
要素の前に配置する必要があります。Magentoの<action method="addJS|addItem">
XML を無視し、各スクリプト用の新しいテンプレートファイルを作成すると便利です。このテンプレートファイルには、次のようなプレーンなHTMLスクリプト参照が含まれています。
<script src="<?php echo $this->getSkinUrl('js/hobbiton.js'); ?>"></script>
その後、次のように、このテンプレートファイルをどこにでも埋め込むことができます(前後を使用して順序を制御できます)。
<block type="core/template name="jquery.hobbiton" after="-" template="custom/jquery/hobbiton.phtml" />
ほとんどの場合、外部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>
タグの直前に移動します。
javascript(およびcss)を最適化し、google pagespeedの洞察ランキングを向上させるために、mediarox pagespeedモジュールを強くお勧めします。
これは、Magentoによるhtml出力を解析し、コードに対して切り取りと貼り付けのアクションを実行して、javascriptをhtmlコードの下部に移動することで機能します。このプロセスは高速ですが、HTMLの変更をキャッシュするには、フルページキャッシュと組み合わせて使用するのが最適です。
このモジュールがどのように機能し、ページ速度のランクを改善するのに役立つかについての詳細は、次のとおりです。
http://blog.gaiterjones.com/magento-google-pagespeed-jscsshtmlminify-optimisation/
Magento v1.6 +の場合(古いバージョンでテストする必要があります);
1- page/html/footer/extras.phtml
このコンテンツでテンプレートファイルを作成します。
<?php echo $this->getCssJsHtml() ?>
2-このhtmlノードをレイアウトxmlに追加します。
<reference name="before_body_end">
<block type="page/html_head" name="extra_js" as="extraJs" after="-" template="page/html/footer/extras.phtml">
<action method="addItem"><type>skin_js</type><name>js/jquery.min.js</name></action>
</block>
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
。
存在しない場合に作成される完全なパスは次のとおりです。
app / local / Mage / page / Block / Html / Footer.php
このファイルには、Magentoのコアと同じフォルダー(Mage / page / Block / Html / Head.php)にあるHead.phpから関数を追加します。
機能させるために必要な関数は次のとおりです(明らかに完全な関数です。ここでは簡潔にするために名前を示しています)
public function addItem($type, $name, $params=null, $if=null, $cond=null)
{...}
public function addJs($name, $params = "")
{...}
public function getCssJsHtml()
{...}
protected function &_prepareStaticAndSkinElements($format, array $staticItems, array $skinItems, $mergeCallback = null)
{...}
protected function _separateOtherHtmlHeadElements(&$lines, $itemIf, $itemType, $itemParams, $itemName, $itemThe)
{...}
protected function _prepareOtherHtmlHeadElements($items)
{...}
次に、カスタム(私のテーマの1つ)page / html / footer.phtmlにこの呼び出しを追加します。
<?php echo $this->getCssJsHtml() ?>
最後に、任意のレイアウトでJSを呼び出すことで、フッターにJSを追加できます。
<action method="addJs"><script>yourscript.js</script></action>