2016-02-15 97 views
0

我們希望爲我們的magento系統中的頁面動態加載css和javascript文件。由於增長js和css文件,我們希望將它們拆分爲單獨的文件並將它們加載到當前頁面。我們使用CMS Advanced content manager來管理我們的頁面內容。因爲我們在CMS中有類似contenttypes的內容,所以我們想知道當前頁面的內容類型。引用我們認爲通過類型名稱加載css和js文件的類型(導致typename是系統中的別名和唯一名稱)。因爲我不深入magento編碼,我不知道應該從哪裏開始。Magento - 動態加載CSS和JS

但也許有另一種解決方案或已知的解決方案來實現我們想要的。

回答

1

您是否嘗試過使用XML在特定內容頁面上加載JS或CSS?

這裏是一個加載CSS文件&的例子。

內容頁面設計選項卡=>自定義佈局更新XML。

<reference name="head"> 
    <action method="addItem"><type>skin_css</type><name>css/your_css.css</name></action> 
    <action method="addItem"><type>skin_js</type><name>js/your_js.js</name></action> 
</reference> 
+0

不幸的是,這不是動態。您必須爲每個新頁面添加自定義XML代碼。所以如果我們找不到解決方案,這將是最後的選擇。 –

0

您可以創建一個擴展,以觀察佈局負載之前的事件。 有了一些請求參數,你可以識別你想要包含一些CSS或JS的頁面。

例如:

app/code/local/Foo/Bar/etc/config.xml

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <modules> 
     <Foo_Bar> 
      <version>0.1.0</version> 
     </Foo_Bar> 
    </modules> 
    <global> 
     <models> 
      <foo_bar> 
      <class>Foo_Bar_Model</class> 
      </foo_bar> 
     </models> 
    </global> 
    <frontend> 
     <events> 
      <controller_action_layout_load_before> 
       <observers> 
        <customer_is_logged_in_observer> 
         <class>foo_bar/observer</class> 
         <method>beforeLoadLayout</method> 
        </customer_is_logged_in_observer> 
       </observers> 
      </controller_action_layout_load_before> 
     </events> 
    </frontend> 
</config> 

app/code/local/Foo/Bar/Model/Observer.php

class Foo_Bar_Model_Observer 
{ 
    public function beforeLoadLayout($observer) 
    { 
     if(Mage::app()->getRequest()->getControllerName()=='page' && 
      Mage::app()->getRequest()->getRouteName()='cms') 
     { 
      $head=$observer->getEvent()->getLayout()->getBlock('head'); 
      $head->addItem('skin_js', 'js/foo.js'); 
      $head->addItem('skin_css', 'css/foo.css'); 
     } 

    } 
}