仅在Widget页面上加载样式表

时间:2011-03-07 19:34:20

标签: php magento

如何仅在包含自定义窗口小部件的页面上将样式表动态加载到Magento的“head”部分?

对于我的脚本我正在这样做:

if($this->getLayout()->getBlock('namespace_module_scripts')==false) {
    $block = $this->getLayout()
        ->createBlock('core/template', 'namespace_module_scripts')
        ->setTemplate('namespace/module/scripts.phtml');
    $this->getLayout()->getBlock('before_body_end')->insert($block);
}

这是我的Widget块类中_prepareLayout()的当前内容。我尝试对样式使用相同的方法,为before_body_end交换head,这非常适合放置窗口小部件实例或手动将块放在我的布局xml中,但是当在窗口内容中插入窗口小部件时头部似乎是在Widget之前渲染的,因此我的样式模板无法插入到头部块中。

我的(希望)临时解决方案是在我的布局xml中的每个页面上加载样式。有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

看起来您已经通过

插入到CMS页面中的小部件SOL了
{{widget...}}}

标签。与实例不同,或直接通过Package Layout XML更新文件添加它,Magento似乎可以动态渲染这些块。也就是说,直到在CMSs内容块上调用toHtml时,Magento才会实例化{{widget...}}块。到那时,头部块已经渲染,并且以编程方式操作它不再有任何效果。

这是我采取的方法。这听起来添加javascript仍然有效(这是有道理的,因为CMS内容块将在before_body_end块之前呈现。)查看loading CSS files via Javascript的技术(较旧的链接,google周围,如果你想要一些web 2ish )。这样你就可以添加一个可以添加CSS文件的javascript块。这样,所有代码仍然只限于小部件,您仍然可以验证html输出。这是一种非常常见的技术。

其他方法包括

  1. 刚刚将内容添加到文档中。糟糕的HTML做法和所有这些(风格不是头脑中的),但你不会成为第一个这样做的人。

  2. 将一个总是的块添加到头部,并包含条件呈现逻辑。在渲染之前,让它检查窗口小部件的布局对象(通过类型)或检查此请求是否针对CMS页面,以及是否检查CMS页面的指令内容({{ 1}})用于渲染小部件。如果其中一个为真,则渲染CSS链接。如果不是,则链接不会呈现。