5

そのため、 Magento用のカスタム ウィジェットがあります(製品のスライドショーなど)。

カスタムCSS / Javascriptをウィジェットに追加したい。

毎回CSS / JSファイルを表示(ロード)したくありません。


ページにカスタム ウィジェットが含まれている場合にのみ、JS/CSS をロードします。

ありがとう。

4

2 に答える 2

4

これは、ウィジェットをウィジェット インスタンス (CMS -> ウィジェット) として追加したか、または次のようにページ、静的ブロック、または電子メールのコンテンツ領域に含めたかによって異なります{{widget type="blabla/carousel"}}

ウィジェット インスタンスとして含めた場合は、次のようにアセットを追加できます。

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

..実装するブロックでMage_Widget_Block_Interface

( http://www.magentocommerce.com/boards/viewthread/212110/を参照)

私の知る限り、テンプレート ディレクティブとしてインラインでウィジェットを含めると、アセットを追加することはできません。これは単純に、HTML ヘッドがその HTML を既に出力しているためです。テンプレート ディレクティブ ({{widget}}または など{{var}}) は、ブロックの _toHtml ステージで認識されています。既にレンダリングされたブロックでメソッドを呼び出しても、何の効果もありません。

のメソッドの$processor->filter呼び出しも参照してください。_toHtmlMage_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;
}
于 2014-01-14T08:40:52.727 に答える
2

この質問はかなり古いことは知っていますが、magento ウィジェットが含まれている場合にのみ CSS または JavaScript を追加する方法を探している人がいる場合に備えて (Erfan の回答のように「ウィジェット インスタンス」である必要はありません)。 ) 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();
    });   
});
于 2015-11-09T21:24:34.297 に答える