0

我在 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 头模板或 magento 头块,所以我添加了以下内容:

output="toHtml"

但这为时已晚:(...

有没有解决方案,例如"add this block on top of the reference (head) with output='toHtml'"

我试过了:

before="-"

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

output="toHtml"

我的 Magento 版本是 1.7。

4

2 回答 2

2

您的问题是您将其添加为 phtml 文件,而不是 JS 文件。尝试将其添加到 page.xml 中,默认 -> root -> head(大约第 37 到 61 行):

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

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

于 2012-09-12T20:12:51.650 回答
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>标签 - 例如:对于 home page <cms_index_index>

于 2012-09-12T20:34:42.783 回答