在TOP的顶部添加一个带有块的jQuery

时间:2012-09-12 20:04:55

标签: php javascript jquery html magento

我在magento中有一个扩展,它在标题中添加了一个用于加载jQuery的块:

<reference name="head">            
     <block type="page/html" 
            template="csdev/embedjquery/embed_jquery.phtml" 
            output="toHtml" 
            name="csdev_embedjquery" />
</reference>

该块的内容如下:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js" />

<script type="text/javascript">    
    $.noConflict();
    alert(jQuery);
</script>

问题是jQuery会在原型之后添加太晚。它需要在原型之前添加,所以我可以执行noConflict()函数。

另外,由于我不想覆盖magento head-template或magento head-block,我添加了以下内容:

output="toHtml"

但是为时已晚:(...

是否有"add this block on top of the reference (head) with output='toHtml'"等解决方案?

我试过了:

before="-"

但它似乎不起作用,因为我写道:

output="toHtml"

我的Magento版本是1.7。

2 个答案:

答案 0 :(得分:2)

您的问题是您将其添加为phtml文件,而不是JS文件。尝试将其添加到page.xml中,默认情况下为&gt; root - &gt;头(第37到61行):

<action method="addJs"><script>jquery/jquery.js</script></action>

然后在/ js中创建一个名为jquery的文件夹,并将jquery.js上传到该文件中。在jquery.js文件的末尾,追加noConflict方法调用。这应该可以解决你的问题。

答案 1 :(得分:2)

您可以使用/app/design/frontend/default/yourtheme/layout/local.xml文件中的以下代码段来实现此目的。如果我们使用此布局覆盖,我们不需要编辑任何核心文件。

<layout version="0.1.0">
    <default>
        <reference name="root">
            <block type="core/text" name="external.cdn.jquery" before="-">
                <action method="setText">
                    <text><![CDATA[<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script><script type="text/javascript">jQuery.noConflict();</script>]]></text>
                </action>
            </block>        
        </reference>
    </default>
</layout>

正如您所看到的,我们正在从外部CDN加载jQuery。这将加载到所有页面上。但是如果您想将其限制为任何特定页面,请使用页面句柄而不是<default>标记 - 例如:for home page <cms_index_index>