我需要根据一些自定义变量在local.xml中添加CSS文件。我有5个CSS文件,但是每次只需要加载一个文件。

我只知道如何检查配置中是否设置了一个变量。如果配置返回true,则CSS文件将在前端加载:

<action method="addItem" ifconfig="my_module/settings/variable"><type>skin_css</type><name>css/a.css</name><params/></action>

所以现在我必须将代码放入 head.phtml 在App Design frontend my_theme default template pag html to加载CSS文件:

<?php
  $my_var = Mage::helper('my_module/my_helper')->getFileName();
?>
<link href="<?php echo $my_var; ?>.css" rel="stylesheet" type="text/css" media="all" />

但这有一个缺点:Magento的CSS/JS合并函数不会合并我的CSS文件。

那么,有什么方法可以做同样的事情,但是在local.xml内部? 有什么方法可以从助手那里调用方法,该方法将返回应加载CSS文件的名称(基于该助手内部的某些计算)?

解决方案候选人 :)

我尝试了类似于Alan Storm在此线程中所描述的内容: https://stackoverflow.com/a/5601579/1647291

我在我的local.xml文件中尝试了一下:

<action method="addItem">
    <type>skin_css</type>
    <name helper="my_module/my_helper/getFileName" />
    <params/>
</action>

助手方法getFilename()返回文件名 a.css. 但是Magento在“基础”主题中搜索该CSS文件,而不是当前主题. 。 Magento用此路径加载CSS文件:

http://example.com/skin/frontend/base/default/a.css

因此,我的文件名称为前缀 example.com/skin/frontend/base/default/. 。但是正确的路径应该是:

http://example.com/skin/frontend/my_theme/default/a.css

有人知道如何实现这一目标吗?

有帮助吗?

解决方案

底线:您需要具有由PHP计算的值,因此使用助手的方法是合适的。我认为使用 addCss 便利方法而不是 addItem A有点清洁,应该满足您的需求:

<{handle}>
    <action block="head" method="addCss">
        <stylesheet helper="my_module/my_helper/getFileName" />
    </action>
</{handle}>

您的助手似乎正在使用设计模型来计算CSS文件的路径,但这将由 page/html_head 堵塞。更改您的助手以简单地返回相对于主题的文件路径(即 不是 使用设计模型)和您的问题得到解决。

其他提示

我只是想让您知道我的问题中描述的解决方案实际上有效。我只是犯了一个愚蠢的错误。此代码已添加到 local.xml 在我的主题中:

<action method="addItem">
    <type>skin_css</type>
    <name helper="my_module/my_helper/getFileName" />
    <params/>
</action>

助手方法getFilename()返回文件名 a.css. 。但是我的CSS文件不在正确的目录中:

http://example.com/skin/frontend/my_theme/default/a.css

因此,Magento试图在“基础”主题中找到该文件,而不是当前主题:

http://example.com/skin/frontend/base/default/a.css

因此,如果文件处于正确的目录中,则所有文件都可以按预期工作。 @benmarks发布的代码也将起作用:

<action method="addCss">
    <stylesheet helper="my_module/my_helper/getFileName" />
</action>
许可以下: CC-BY-SA归因
scroll top