2012-09-12 56 views
0

我在Magento具有延伸部的頂部上增加了一個塊中的報頭,用於加載的jQuery與塊添加的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。

回答

2

你的問題是你將它添加爲phtml文件,而不是JS文件。嘗試添加這個代替成page.xml,默認內 - >根 - >頭(圍繞線37至61):

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

然後創建稱爲jquery的/ JS內的一個文件夾,並上傳的jquery.js到該文件。在jquery.js文件的末尾,追加noConflict方法調用。這應該能解決你的問題。

+0

感謝您的回覆!但是,我會改變一個magento系統文件。也不會是從「jQuery.noConflict()」方法執行。所以它會與原型發生衝突。 –

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>標籤 - 例如:主頁<cms_index_index>

+0

嘿,看來這就是我期待的! :) 我會嘗試一下,然後告訴你它是否工作! :) –

+0

嗯,這不工作。 Magento不會給出塊文本,在根phtml需要輸出超過$ this-> getChildHtml(「...」):(也許沒有改變phtml文件沒有解決方案 –

+0

有沒有理由不應該工作,因爲我在我的許多網站中都使用過這個代碼。如果你錯過了這個,那麼http://classyllama.com/development/magento-development/the-better修改-magento-layout – bjjn