2012-08-13 80 views
5

我需要在塊文件中有條件地和編程地添加一個JS文件。我試着用這些代碼:如何在Magento中以編程方式添加JS?

if (Mage::getStoreConfig('mymodule/settings/enable')) { 
$this->getLayout()->getBlock('head')->addJs('path-to-file/file1.js'); 
} else { 
$this->getLayout()->getBlock('head')->addJs('path-to-file/file2.js'); 
} 

但是,無論設置是什麼,都不加載此文件。我甚至試圖消除這種情況,只顯式加載一個文件,但它仍然不起作用。我在這裏做錯了什麼?

+1

條件語句是否適用於簡單的echo/print? – 2012-08-13 15:25:38

+0

感謝Alan的回覆。是的,如果我將它回顯出來,條件確實會提供0或1。但是,我試圖消除除了一行之外的整行: $ this-> getLayout() - > getBlock('head') - > addJs('path-to-file/file1.js'); 但它仍然無法正常工作。該路徑位於js根目錄之後。 – user1576748 2012-08-13 16:47:15

+1

您從哪個區塊的模板文件調用? – 2012-08-13 17:33:19

回答

18

這裏的問題可能是處理順序之一。我的猜測是你的PHP代碼在頭塊被渲染後正在被評估。當您的代碼正在成功更新頭塊類實例時,它在從該實例生成輸出後發生。

更好的解決方案是在佈局XML中添加addJs()調用,以便在渲染前處理它們。如果有ifnotconfig屬性,這將是很好的,但現在你可以使用助手。

使用一種方法創建一個幫助類,該方法根據配置設置返回腳本路徑,然後將其用作返回參數。

<?php 
class My_Module_Helper_Class extends Mage_Core_Helper_Abstract 
{ 
    public function getJsBasedOnConfig() 
    { 
     if (Mage::getStoreConfigFlag('mymodule/settings/enable')) { 
      return 'path-to-file/file1.js'; 
     } 
     else { 
      return 'path-to-file/file2.js'; 
     } 
    } 
} 

然後在佈局XML:

<?xml version="1.0"?> 
<layout> 
    <default> 
     <reference name="head"> 
      <action method="addJs"> 
       <file helper="classgroup/class/getJsBasedOnConfig" /> 
       <!-- i.e. Mage::helper('module/helper')->getJsBasedOnConfig() --> 
      </action> 
     </reference> 
    </default> 
</layout> 
+0

非常棒! !它的工作原理,除了你的代碼在「if」行有錯字錯誤之外,在curl括號之前有一個不需要的關閉括號 無論如何,非常感謝你 – user1576748 2012-08-13 18:46:25

+1

(1)不測試的危險和(2 )編碼雖然時差。更正:-) – benmarks 2012-08-13 18:59:50

3
$this->getLayout()->getBlock('head')->addJs('path'); 

它的正確的代碼,搜索如果你的路徑是正確的。

+0

謝謝你的回覆。是的,路徑是正確的。它相對於根js文件夾。我甚至試圖將我的js文件複製到該根js文件夾(無子文件夾)並直接訪問它,就像addJs('file1.js'); – user1576748 2012-08-13 16:54:47

+0

嘗試把代碼:<?php echo $ this-> getJsUrl(); ?> jsFile.js「並查看他編寫的代碼。xml addjs是相同的。 – Guerra 2012-08-13 17:06:40

+1

如果要添加絕對路徑示例,請執行以下操作:http://somedomain.com/js/some.js – awavi 2014-04-02 01:24:27

1

我知道這是問了很久以前的事,但如果有人在找這個,我會建議你local.xml中使用此:

<layout> 
    <default> 
     <reference name="head"> 
      <action ifconfig="path/to/config" method="addJs"> 
       <script>pathto/file.js</script> 
      </action> 
     </reference> 
    </default> 
</layout> 

當然這是針對位於/ js /文件夾中的JS文件。如果您想添加skin_js或skin_css,請使用適當的方法。

PS。測試CE 1.9

相關問題