Magento将CSS和JS添加到页脚


15

我正在对Magento网站进行Yslow优化,并尝试将CS​​S和Js添加到网站的页脚中。

目前,我正在布局XML中使用头参考标记,并使用addJsaddCss动作来包含我的所有文件。我尝试将页眉引用替换为页脚,但是在尝试查看站点时出现错误。有没有办法做到这一点,local.xml 或者必须将其硬编码到页脚模板文件本身中?



1
提供交换后尝试查看站点时收到的错误,可能有助于人们回答您的问题。
艾伦·斯托姆

3
除了将JS移至页脚之外,我敢肯定您不想将CSS移至页脚。应该在<head>
pspahn

Checkout @sonassi链接到我的旧帖子。其中一种解决方案是正确的,并且可以正常工作,但是请注意,启用合并后会获得多个合并的JS文件。如果您还包括使用不同句柄的JS,似乎会发生这种情况。
马克韦斯顿2013年

CSS在脚。糟糕的页面显示...并且JS应该仅对可能阻止页面显示的外部包含执行。服务器提供的所有服务都应放在首位。它是框架,框架在页面汇编中大量使用,应该在页面开始呈现之前就存在。大多数建议都是盲目地遵循,而没有理解(货物崇拜)您为什么会受到损害。
Fiasco Labs

Answers:


7

我知道这不是您问题的答案,而是您可能仍要考虑的问题。

Magento使用了很多内联JavaScript,尤其是在产品详细信息页面上。由于该javascript取决于标头中加载的外部脚本,因此您还需要将所有内联脚本也移至外部文件,并将其添加到页脚中。

通过使用Magento内置的工具压缩CSS和JS,并使用gzip压缩和远期标头来加速它们,可能会更快更好。这样,由javascript和CSS引起的“延迟”将保持在最低水平,而无需更改默认的Magento和3rd party扩展布局。这样,当您升级Magento或扩展程序时,无需重做所有工作。

HTML5样板项目提供的.htaccess提供了gzip压缩和远期标头,请检查http://inchoo.net/ecommerce/magento/magento-boilerplate/


2
OP的错误很可能是由乱序加载引起的-大多数内联脚本都需要原型等。如果仅在页脚中加载,则为时已晚。删除内联JS是第一步。很多工作-祝你好运。
克里斯托夫在Fooman,2013年

4

第一步是创建一个名为“ foot”的块,该块与“ head”基本相同,但是您将在另一个位置输出它。您可以将其添加到您的page.xml

    <block type="page/html_head" name="foot" as="foot" template="page/html/foot.phtml"/>

现在,您可以在任何XML文件中使用以下命令添加JS / CSS(尽管不建议在页脚中添加CSS):

    <reference name="foot">
        <action method="addItem">
            <type>skin_js</type>
            <name>js/somefile.js</name>
        </action>
        <action method="addItem">
            <type>skin_js</type>
            <name>js/main.js</name>
        </action>
    </reference>

内部page/html/foot.phtml

<?php echo $this->getCssJsHtml() ?>
<?php echo $this->getChildHtml() ?>
<?php echo $this->helper('core/js')->getTranslatorScript() ?>
<?php echo $this->getIncludes() ?>

在页面模板文件(例如page/1column.phtml)中,您需要在结束body标签之前输出以下代码块:

    <?php echo $this->getChildHtml('foot') ?>

如果您使用默认的Magento模板,则会出现JS错误。以迷你搜索表单为例(catalogsearch/form.mini.phtml)。它具有以下内联脚本:

<script type="text/javascript">
    //<![CDATA[
    var searchForm = new Varien.searchForm('search_mini_form', 'search', '<?php echo $this->__('Search Redset...') ?>');
    //]]>
</script>

它将在加载后立即调用,因为它不在任何文档就绪处理程序中。Varien尚不存在,因为它位于页脚中,因此会出现错误。您可以通过添加文档就绪处理程序或将具有这种性质的所有内联JS移动到也加载在页脚中的外部文件中来解决此问题。这样的问题将在整个站点中发生,尤其是在结帐和可配置的产品页面中。

您可能遇到的另一个问题是,如果您在noConflict模式下将jQuery与Prototype一起使用。您需要确保在Prototype之前加载jQuery,以免发生冲突。


2

对于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-就是这样!


在结束body标记之前添加js脚本的方法比上述方法简单得多
asherrard
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.