そのため、 Magento用のカスタム ウィジェットがあります(製品のスライドショーなど)。
カスタムCSS / Javascriptをウィジェットに追加したい。
毎回CSS / JSファイルを表示(ロード)したくありません。
ページにカスタム ウィジェットが含まれている場合にのみ、JS/CSS をロードします。
ありがとう。
そのため、 Magento用のカスタム ウィジェットがあります(製品のスライドショーなど)。
カスタムCSS / Javascriptをウィジェットに追加したい。
毎回CSS / JSファイルを表示(ロード)したくありません。
ページにカスタム ウィジェットが含まれている場合にのみ、JS/CSS をロードします。
ありがとう。
これは、ウィジェットをウィジェット インスタンス (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
呼び出しも参照してください。_toHtml
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;
}
この質問はかなり古いことは知っていますが、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();
});
});