2013-02-15 84 views
2

所以,我有自定義部件Magento的(如幻燈片產品)。如何將CSS文件添加到Magento中的CUSTOM WIDGET?

而且要添加自定義CSS /JavaScript的我的小部件。

我不想顯示(負載)CSS/JS文件每次。


我想加載JS/CSS只有當PAGE包括自定義的Widget。

感謝。

+1

如果存在包含小部件的特定種類的頁面類型,則只能在相關佈局中添加js。你會在哪裏顯示你的部件? – dagfr 2013-02-15 09:29:06

+0

我想在任何頁面類型上插入小部件。 並希望僅在頁面上包含小部件時才添加自定義JS/CSS。 我不想爲每種類型的頁面編輯佈局XML。 因此,我仍然在爲Magento小部件尋找JS/CSS解決方案。 但是認爲Magento對我的想法沒有解決方案。 :( – Magefast 2013-03-03 21:04:12

回答

3

這取決於您是否已將小部件作爲小部件實例(CMS - >小部件)添加或已將其包含在頁面,靜態塊或電子郵件的內容區域中,如{{widget type="blabla/carousel"}}

如果你已經包括它作爲一個小部件實例,您可以將您的資產,像這樣:

protected function _prepareLayout() { 
    if ($head = $this->getLayout()->getBlock('head')) { 
     $head->addCss('myfile.css'); 
    } 
    return parent::_prepareLayout(); 
} 

..in您塊實現Mage_Widget_Block_Interface

(見http://www.magentocommerce.com/boards/viewthread/212110/

AFAIK,這是不可能的,當你包括部件直列作爲模板指令來增加資產。這很簡單,因爲HTML頭已經輸出它的HTML:模板指令(如{{widget}}{{var}})在塊的_toHtml階段被發現。調用已經渲染的塊上的任何方法都不會產生任何影響。

也看到_toHtml方法$processor->filter呼叫Mage_Cms_Block_Page

protected function _toHtml() 
{ 
    /* @var $helper Mage_Cms_Helper_Data */ 
    $helper = Mage::helper('cms'); 
    $processor = $helper->getPageTemplateProcessor(); 
    $html = $processor->filter($this->getPage()->getContent()); 
    $html = $this->getMessagesBlock()->toHtml() . $html; 
    return $html; 
} 
0

我知道這個問題是相當老,但如果有任何人正在尋找一種方式來添加CSS或JavaScript只有當Magento的窗口小部件(無需要求它是一個「小部件實例」,如由爾法恩給出的答案)我會建議你PHTML模板文件使用一個小的AJAX腳本。如果你的設計包不使用jQuery,那麼你的代碼可能會有所不同。

jQuery(document).ready(function(){ 
jQuery.when(
    jQuery.ajax({ 
     type: "GET", 
     url: "<?php echo $this->getSkinUrl('css/myWidget.css');?>", 
     success: function(data){ 
      jQuery("head").append("<style>" + data + "</style>"); 
     }, 
     dataType: "html", 
     cache: false, 
    }), 
    jQuery.ajax({ 
     type: "GET", 
     url: "<?php echo $this->getSkinUrl('js/myWidget.js');?>", 
     dataType: "script", 
     cache: false, 
    }) 

).then(function(){ 
     myWidget.setupFunction(); 
    }); 
});